在AngularJS中,ng-repeat
是一个核心指令,用于循环遍历数组或对象集合,并为每个元素生成DOM元素。隐藏和显示ng-repeat
生成的内容是常见的需求。
<div ng-repeat="item in items" ng-show="shouldShow(item)">
{{ item.name }}
</div>
$scope.shouldShow = function(item) {
// 返回true显示,false隐藏
return item.visible;
};
<div ng-repeat="item in items" ng-if="item.isVisible">
{{ item.name }}
</div>
<div ng-repeat="item in items" ng-class="{'hidden': !item.visible}">
{{ item.name }}
</div>
.hidden {
display: none;
}
<div ng-repeat="item in items | filter:isVisible">
{{ item.name }}
</div>
$scope.isVisible = function(item) {
return item.visible;
};
| 方法 | 特点 | 适用场景 | |------|------|----------| | ng-show/ng-hide | 通过CSS显示/隐藏,元素仍在DOM中 | 频繁切换显示状态 | | ng-if | 从DOM中添加/移除元素 | 初始渲染时决定是否显示 | | CSS类 | 通过CSS控制,元素仍在DOM中 | 简单的显示/隐藏需求 | | filter | 过滤数组,减少渲染元素 | 需要减少DOM元素数量时 |
问题:当ng-repeat
列表很大时,频繁切换显示状态可能导致性能问题。
解决方案:
track by
提高性能ng-if
而不是ng-show
来减少DOM元素数量<div ng-repeat="item in items | filter:isVisible track by item.id">
{{ item.name }}
</div>
问题:希望在显示/隐藏时有动画效果。
解决方案:
使用ngAnimate
模块添加动画:
angular.module('app', ['ngAnimate']);
.animate-show {
transition: all linear 0.5s;
}
.animate-show.ng-hide {
opacity: 0;
}
<div ng-repeat="item in items" ng-show="item.visible" class="animate-show">
{{ item.name }}
</div>
问题:显示条件复杂,难以在模板中表达。
解决方案: 在控制器中预先计算或使用方法:
$scope.getVisibility = function(item) {
return item.active && (item.price > 100 || item.category === 'premium');
};
<div ng-repeat="item in items" ng-if="getVisibility(item)">
{{ item.name }}
</div>
ng-if
减少DOM元素数量ng-show/ng-hide
track by
通过合理选择这些方法,可以有效地在AngularJS应用中控制ng-repeat
生成内容的显示和隐藏。
没有搜到相关的文章