【发布时间】:2016-02-13 01:44:00
【问题描述】:
我对 AngularJS 比较陌生。在尝试创建指令时,我可以解决这个问题:当使用“ng-repeat”动态添加指令元素的子元素时,如何动态添加/删除这些子元素的属性?
首先,我想到了这个解决方案:
模板
...
a.list-group-item(ng-repeat='playlist in playlists', ng-click='addToPlaylist(playlist, track)', ng-href='playlist/{{ playlist._id }})
...
*指令
link: function(scope, elm, attrs) {
var listItems = angular.element(element[0].getElementsByClassName('list-group-item')
angular.forEach(listItems, function(item, index) {
'add' in attrs ? item.removeAttr('href') : item.removeAttr('ng-click');
listItems[index] = item;
}
...
结果
事实证明,我的代码永远不会进入这个 angular.forEach 循环,因为 listItems 是空的。我想这是因为 ng-repeat 正在等待 scope.playlists 填充来自通过 $resource 对服务器的异步调用的数据。
临时修复
在指令定义中,我添加了一个布尔变量,用于检查元素属性中是否存在“add”:var adding = 'add' in attrs ? true : false;
然后在模板中,
a.list-group-item(ng-if='adding', ng-repeat='playlist in playlists', ng-click='addToPlaylist(playlist, track)')
a.list-group-item(ng-if='!adding', ng-repeat='playlist in playlists', ng-href='playlist/{{playlist._id }}')
虽然它工作正常,但它显然根本不是 DRY。帮助!
【问题讨论】:
-
您的最终解决方案实际上并没有那么糟糕,尽管它似乎是重复的。
标签: javascript jquery angularjs jqlite