簡體   English   中英

有角度的嵌套指令重復,如果parent為$ last,則通過

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM