我正在寻找一种解决方案,可让我根据设定变量使用ng-repeat
或collection-repeat
作重复列表。
我知道有以下可能性:
ng-attr
我想避免1,因为我不想要两个模板 - 我必须不断更新代码。
就2而言,看起来我不能将它应用于传递参数的指令(Angular - Use attribute directive conditionally)
我想要实现的目标是:
//if $root.platformOS == "desktop"
<ion-item ng-repeat="event in events| filter:search.text" item-height="event.Event.height" id="item-{{$index}}">
//if $root.platformOS != "desktop"
<ion-item collection-repeat="event in events| filter:search.text" item-height="event.Event.height" id="item-{{$index}}">
谢谢。
答案 0 :(得分:1)
app.directive('repeat', function ($compile, $rootScope) {
return {
restrict: 'A',
priority: 2000,
terminal: true,
link: function (scope, element) {
var repeatDirective = ($rootScope.platformOS == 'desktop') ? 'ng-repeat' : 'collection-repeat';
element.attr(repeatDirective, element.attr('repeat'));
element.removeAttr('repeat');
$compile(element)(scope);
}
};
});
这样,指令被抽象为单个指令,因为它们的语法是相同的。
将两个重复包装到指令模板中切换的指令是最好的,但如果额外的包装元素不适合布局,则可能不合需要。