9

Sto provando a catturare $ last property per essere notificato quando ng-repeat termina. Ho creato una direttiva speciale per questo (ngRepeatDoneNotification). Ng-repeat si applica alla direttiva di un altro elemento (unità). Quindi, v'è una costruzione con tre direttive:

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

Una volta ho impostato portata ad essere isolato, $ lo scorso scomparve nella mia direttiva notificante.

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) {} 
    } 
}); 

ho creo jsFiddle http://jsfiddle.net/4erLA/1/

Come è possibile raggiungere questo?

+0

Non penso che tu possa avere un attributo 'id' dinamico come quello. – finishingmove

risposta

11

Al fine di rendere il isolato ambito per catturare $last, è necessario utilizzare $parent per fare riferimento al campo di applicazione genitore come questo

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

Potrebbe essere refactoring per farlo funzionare sia per lo scenario o semplicemente semplicemente duplicato.

+0

grazie, c'è un modo per rilevare l'ambito corrente è isolato, per essere in grado di fare ngRepeatDoneNotification funziona in tutti i casi? Ho trovato scope. $$ isolateBindings, ma aiuta solo nel caso l'ambito definito con hash non vuoto. – acidron

+0

@acidron Questa è una buona domanda. Non lo so, ma puoi provare a verificare se 'scope. $ Parent. $ Parent' è nullo, se è nullo, allora dovrebbe essere direttamente all'interno dell'ambito del controller, altrimenti dovrebbe trovarsi all'interno di un altro livello di scopo. – zsong