在Angular中,嵌套指令重复,如果parent是$last,则传递
Angular, nested directive repeats, pass if parent is $last
我试图触发一个事件一旦所有的重复在这个嵌套的重复完成。我知道你可以使用$last,但我无法在内部repeat中告诉你它是否在父repeat中的$last上。这里是
<div>
<div ng-repeat="filter in filters.filters" repeat-directive-one filter="filter" update-filter="updateFilter">
</div>
</div>
然后在repeat-directive-one里面看起来像
<div ng-repeat="item in filter.values | limitTo: filter.showMore ? filter.values.length : '5' track by $index" repeat-directive-two value="::item" update-filter="updateFilter" ng-if="!$last"></div>
<div ng-repeat="item in filter.values | limitTo: filter.showMore ? filter.values.length : '5' track by $index" repeat-directive-two value="::item" update-filter="updateFilter" ng-if="$last"checkbox-fix></div>
那么它的作用是,如果它是在重复的最后一项上,它会添加checkbox-fix指令来修复问题。但是如果上面的repeat有4个条目,则会触发4次所以我想要的是
ng-if="$last && parent.$last"
,但逻辑似乎没有按预期工作。我甚至试图传递父last(布尔)作为隔离范围attr,如(重复指令1)
<div ng-repeat="filter in filters.filters" repeat-directive-one filter="filter" update-filter="updateFilter" last-property="$last">
但是正在记录$scope。lastProperty不返回任何值。所以我想要一种传递某种标记的方法父类repeat是$last。有什么办法可以做到吗?谢谢!
你可以尝试像这样广播外循环完成的时间,然后内部循环的最后一个循环应该开始监视$last
<div ng-repeat="stuff in stuffs" outer-loop>
<div ng-repeat="item in items" inner-loop></div>
</div>
angular.module('test').directive('outerLoop', function($rootScope){
return function(scope, element, attrs) {
if (scope.$last){
$rootScope.$broadcast('outerLoopComplete');
}
};
});
angular.module('test').directive('innerLoop', function(){
return function(scope, element, attrs) {
var outerLoopComplete = false;
scope.$on('outerLoopComplete', function(){
outerLoopComplete;
});
if(outerLoopComplete && $last){
//inner loop complete
}
};
});
我最终根据@trevor的建议解决了这个问题:
<div ng-repeat="item in filter.values | limitTo: filter.showMore ? filter.values.length : '5' track by $index" repeat-directive-two value="::item" update-filter="updateFilter" checkbox-fix></div>
将checkbox-fix固定在repeat上(不需要通过ng-if切换2),然后在checkbox-fix指令中我这样做:
return {
restrict: 'A',
link: function(elem, attr, tr) {
if(elem.$parent.$parent.$last && elem.$last){
//fixed!
}
}
};
所以elem。$last工作得很好,我不得不检查一下数据/结构,意识到我必须执行elem.$parent.$parent。
https://docs.angularjs.org/api/ng/directive/ngInit
你可以使用ngInit将$last的值设置为一个作用域变量,在隔离作用域的情况下,你应该能够从子作用域直接或间接地访问这个变量。
相关文章:
- Last.fm API发送2个曲目时,我要求一个,如果我正在听一首歌
- jQuery parent() in table
- Regex Replace仅适用于Last Match
- iFrame parent node
- 哪个更有效-$('selecter').last()或$(')selecter:last'
- Javascript TypeError:$(..)parent不是函数
- 在页面内执行一个javascript函数作为last
- parent和iframe中的Bootstrap.js文件
- jQuery last child和insetBefore不起作用
- 如何捕获jqueryDialog和Parent之间的交互
- JavaScript-删除last();工作不正常
- Chrome扩展插件:runtime.last运行tabs.get/tabs.remove时出错:没有id为0的选项卡
- 如何从DOM(KnockoutJS)中删除$data、$parent等
- 在angular中使用$parent是一种好的做法吗
- 从 Childe 到 Parent ASP 的变量
- this.constructor.apply vs this.parent.apply
- 使用 JavaScript Regex 将“First.Last@example.com”变成“flast”
- 在JQuery中使用parent()和children()方法的缺点
- 在我的指令中获取$last和$parent
- 在Angular中,嵌套指令重复,如果parent是$last,则传递