[英]Angular, nested directive repeats, pass if parent is $last
一旦此嵌套重復中的所有重復都完成,我試圖觸發一個事件。 因此,我知道您可以執行$ last,但是我無法在內部重復中告訴它父級重復中的$ last。 所以我有這個
<div>
<div ng-repeat="filter in filters.filters" repeat-directive-one filter="filter" update-filter="updateFilter">
</div>
</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"></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指令來解決問題。 但是,如果上部重復項包含4個項目,則將觸發4次,因此我想要某種程度的
ng-if="$last && parent.$last"
但是這種邏輯似乎並沒有達到預期的效果。 我什至試圖將父級last(boolean)作為隔離范圍attr傳遞(如重復指令一)
<div ng-repeat="filter in filters.filters" repeat-directive-one filter="filter" update-filter="updateFilter" last-property="$last">
但是登錄$ scope.lastProperty不會返回任何內容。 因此,我想采用一種方法來傳遞某種形式的標記,即父級重復是$ 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粘在重復上(不需要2通過ng-if切換),然后在checkbox-fix指令中,我這樣做是:
return {
restrict: 'A',
link: function(elem, attr, tr) {
if(elem.$parent.$parent.$last && elem.$last){
//fixed!
}
}
};
因此,elem。$ last工作得很好,我不得不檢查一下數據/結構,以意識到我必須做elem。$ parent。$ parent。$ last,而不是僅僅一級父級。
https://docs.angularjs.org/api/ng/directive/ngInit
您可以使用ngInit將$ last的值設置為作用域變量,如果是隔離作用域,則應該能夠直接和間接地從子作用域訪問此變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.