删除元素会留下ng-repeat注释
Removing elements leaves behind ng-repeat comments
我做了一个清单,列出了一些项目,有些项目允许你点击它们来查看类似的项目。当我在用户关闭列表后删除类似的item元素时,它留下了…
<!-- ngRepeat: item in category.items(3606) | orderBy:'sort_order' -->
<!-- end ngRepeat: item in category.items(3606) | orderBy:'sort_order' -->
会导致问题,因为每当这些项在作用域中被更新时,angular就会重新创建ng-repeat并显示它。我破坏元素是错的吗?
app.directive('similar', function($rootScope, $compile, $templateCache, Item, Allo){
return {
restrict: 'A',
link: function(scope, elem, attrs) {
var unqId = _.uniqueId('similar');
elem.on('click', function(){
// if user closes the list of similar items, destroy the contents
if (elem.hasClass('glyphicon-upload')) {
elem.removeClass('glyphicon-upload');
angular.element('.'+ unqId).remove();
return;
}
elem.addClass('glyphicon-upload');
var itemId = scope.$parent.item.id;
var similars = scope.similars[itemId];
if (similars) {
var row = $templateCache.get('inventory/views/_row.htm');
var html = $compile('<tr class="'+ unqId +'" ng-repeat="item in category.items('+ similars +') | orderBy:''sort_order''">'+ row +'</tr>')(scope);
elem.parents('tr').after(html);
}
});
}
};
});
首先,这种DOM操作在指令中通常是不必要的。你很有可能实现你想要的东西,如:
<table similar ng-hide="similar_items.length == 0">
<tr ng-repeat="item in similar_items" ...>
<!-- contents of inventory/views/_row.htm here -->
</tr>
</table>
table
将被隐藏,当similar_items
同样为空时,<tr>
的集合为空,因此您需要在作用域中设置:
elem.on('click', function() {
...
var itemId = scope.$parent.item.id;
var similars = scope.similars[itemId];
scope.similar_items = category.items(similars);
});
你根本不需要手动操作DOM——angular将绑定到作用域中的similar_items
属性,并在<tr>
上做正确的事情。您可以通过类似的机制添加/删除glyphicon-upload
类,尽管隐藏元素上的类的用途将作为练习:)
可能修复你的遗留注释问题;我在不同的情况下遇到过同样的问题(在动画完成后修改作用域的模型),但尚未解决它。
相关文章:
- ng init中的表达式无法使用ng repeat
- Angular ng repeat order将多个字段作为一个字段
- 访问ng repeat中的第一个项目
- Angular js+ng repeat+字母数字索引不起作用
- 如何正确应用Angularjs ng repeat
- AngularJS Navigation (li ng-repeat, create header li), DOM
- 如何使用ng repeat中的选定输入更新我的对象
- 无法使用ng repeat检索动态创建的JSON对象的属性
- 使用 ng-repeat访问 ng 表单元素/值
- Toggle Switch在包含ng model和ng repeat之后不进行切换
- 如何在ng repeat angular js中使用$index
- 在Angularjs中,我如何使用ng repeat、ng model和ng click来动态更改内容
- ng repeat在ng repeat-过滤器不工作
- 在ng repeat中使用带有orderBy的方法
- Angular JS ng-repeat
- 在ng repeat中使ng disabled为true
- AngularJS:如何在ng repeat中使用$index
- 复选框无法正常使用ng repeat,AngularJs
- 如何避免在HTML中使用ng repeat对url名称进行硬编码
- 删除元素会留下ng-repeat注释