在没有应用指令函数的指令内部重复
ng-repeat inside of a directive not having directive functions applied to it
我试图基本上在一个角指令内包装同位素。同位素插件正在为.card的a、b和c调用,但没有为d调用。我怎样才能得到所有来自ng-repeat的。card,以便将同位素指令应用于它们?
<div id="cardHolder" isotope>
<div class="card">a</div>
<div class="card w2">b</div>
<div class="card">c</div>
<div class="card" ng-repeat="user in users">d</div>
</div>
指令angular.module('web').directive('isotope', function() {
return {
restrict: 'A',
link: function(scope, element, attrs, fn) {
$(element).isotope({
itemSelector: '.card',
layoutMode: 'fitRows',
});
}
};
});
我发现了这个,但它似乎没有为我的情况做任何事情
在您的ng-repeat
项上设置$watch(或在本例中为$watchCollection),并在浏览器呈现后初始化同位素容器。如果scope.users
中出现任何新项目,请重新装载/重新绘制包含新项目的容器:
.directive('isotope', function($timeout) {
return {
restrict: 'A',
link: function(scope, element, attrs, fn) {
var init;
scope.$watchCollection('users', function(val){
$timeout(function(){
if(!init) {
$(element).isotope({
itemSelector: '.card',
layoutMode: 'fitRows'
});
init = true;
} else {
$(element).isotope('reloadItems').isotope();
}
});
});
}
}
});
恰好演示
我是angularjs初学者。一旦我有同样的问题与customSelect jquery插件。
我用$timeout(angular的setTimeout())解决了这个问题。
对于你,它看起来像这样:
app.directive('isotope', ['$timeout', function($timeout) {
return {
restrict: 'A',
link: function(scope, element, attrs, fn) {
$timeout(function() {
$(element).isotope({
itemSelector: '.card',
layoutMode: 'fitRows'
});
}, 0);
}
};
}]);
我相信这种行为的原因是范围和widget/插件的重新应用问题。同位素不会等待ng重复。
这个问题应该有更具体的解决办法。但对于"快速解决",$timeout将有所帮助。
相关文章:
- 角度控制器功能不;在指令内部调用时,似乎无法始终如一地工作
- 如何在angularjs中对指令内部的JSON数组使用过滤器
- $watch使用隔离范围时从角度指令内部更改值
- Angular 指令内部 HTML 重新编译,动态创建绑定属性
- 从指令内部访问内插值
- AngularJS:如何在指令编译和链接后从指令内部运行JavaScript
- 如何传递ng模型对象而不是指令内部的值
- 指令内部的DOM查询
- 将html附加到具有范围值的指令内部
- Angular ui路由器阻止指令内部的状态触发
- http调用位于指令内部的控制器内部
- 从另一个控制器中的指令内部定义的一个控制器调用方法:AngularJS
- Angular从指令内部的输入中删除无效内容
- angular-如果src错误,则在指令内部拼接数组
- 如何在指令内部用innerHTML插入的html上使用ng-bind
- 改变ng-repeat from指令内部的作用域
- AngularJS:在指令内部的链接函数中访问json响应
- 如何从指令内部观察变量的变化
- 指令内部的模板
- 在没有应用指令函数的指令内部重复