9

Próbuję złapać ostatnią właściwość, aby otrzymać powiadomienie, gdy zakończy się ng-powtórzenie. Dla tego stworzyłem specjalną dyrektywę (ngRepeatDoneNotification). Powtórzenie Ng dotyczy innej dyrektywy elementu (unit). Tak, nie jest to konstrukcja z trzema dyrektywami:

<unit ng-repeat="unit in collection" ng-repeat-done-notification id="{{unit.id}}"></unit> 

Raz ustawiony zakres być izolowane, $ ostatni zniknął w moim dyrektywy zgłaszającego.

App.directive('ngRepeatDoneNotification', function() { 
    return function(scope, element, attrs) { 
    if (scope.$last){ // ISSUE IS HERE 
     window.alert("im the last!"); 
    } 
    }; 
}); 

App.directive('unit', function() { 
    return { 
    restrict: 'E', 
    replace: true, 
    scope: {id: '@'}, // ONCE I ISOLATE SCOPE, $last DISAPPEARED 
    templateUrl: '/partials/unit.html', 
    link: function(scope, element) {} 
    } 
}); 

mam stworzyć jsFiddle http://jsfiddle.net/4erLA/1/

Jak to możliwe, aby złapać tego?

+0

Nie sądzę, że możesz mieć dynamiczny atrybut 'id' w ten sposób. – finishingmove

Odpowiedz

11

W celu uczynienia izolowane zakres złapać $last, trzeba użyć $parent w odniesieniu do zakresu dominującej jak ten

if (scope.$parent.$last) { 
    $rootScope[attrs.ngRepeatDoneNotification] = "$last has been catched" 
} 

może byłaby to aby pracować zarówno w scenariuszu lub po prostu po prostu go duplikuj.

+0

dziękuję, czy istnieje sposób na wykrycie obecnego zakresu jest izolowany, aby móc wykonać ngRepeatDoneNotification działa w każdym przypadku? Znalazłem scope. $$ isolateBindings, ale pomaga tylko w przypadku zakresu zdefiniowanego z niepustym hashem. – acidron

+0

@acidron To dobre pytanie. Nie wiem, ale możesz spróbować sprawdzić, czy 'scope. $ Parent. $ Parent' ma wartość null, to jeśli ma wartość null, to powinno znajdować się bezpośrednio w zasięgu kontrolera, jeśli nie powinno znajdować się wewnątrz innego poziomu zakres. – zsong

Powiązane problemy