2016-08-14 4 views
0

Ich habe diese Direktive und wenn ich nach oben scrollen als die Link-Funktion aufgerufen wird - das funktioniert gut. In der Link-Funktion werde ich 4 Einträge des Arrays spleißen - aber dies hat keinen Einfluss auf die Ansicht - es werden immer noch die ganzen Einträge des Arrays angezeigt. Daher meine Frage wäre, was ich tun kann, um die splices arrayentries aus der Browseransicht zu entfernen?AngularJS Direktive als Attribut - ändern Array in Direktive

(function() { 
'use strict'; 

angular 
    .module('myProject.common') 
    .directive('asScrollTop', asScrollTop); 

function asScrollTop() { 
    var directive = { 
     restrict: 'A', 
     scope: { chatMessagesOfUser: '=chatMessagesOfUser' }, 
     link: link 
    }; 
    return directive; 

    //////////// 

    function link(scope, element, attr) { 
     console.log(element); 
     element.on('scroll', function() { 
      if(element[0].scrollTop <= 0) { 
       scope.chatMessagesOfUser.splice(1, 4); 
      } 
     }); 
     } 
    } 
})(); 

Die Verwendung der Richtlinie ist es wie folgt aus:

<div data-as-scroll-top data-chat-messages-of-user="vm.chatMessagesOfUser"> 
</div> 
+0

Ich machte eine Plnrkr mit Ihrem Problem, aber ich erkannte (http://plnkr.co/edit/fc2it2ZN7Bjxs9EJRJB1) Ich weiß nicht, was Sie versuchen zu tun. Wann geht deine ng-Wiederholung? Versuchen Sie, die Liste zu splitten, wenn der Benutzer den Listencontainer scrollt? Wenn ja, wozu dient das? – mcranston18

+0

ng-repeat zeigt die Liste in der Browser-Ansicht an, und wenn der Benutzer oben scrollt, sollten einige Elemente im Array gelöscht werden. Der Gegenstand sollte also nicht vor dem ng-repeat gelöscht werden. Vielen Dank – quma

+0

können Sie die PLNKR oben bearbeiten, so dass die HTML in der PLNKR entspricht der HTML Ihrer App? Ich bin immer noch nicht klar, wo Sie auf Ihrer Liste iterieren. – mcranston18

Antwort

1

Wenn Sie eine gebundene Variable von einer Richtlinie ändern, müssen Sie Winkel informieren aktualisieren muss. Sie können dies mit $apply() tun.

(function() { 
'use strict'; 

angular 
    .module('myProject.common') 
    .directive('asScrollTop', asScrollTop); 

function asScrollTop() { 
    var directive = { 
     restrict: 'A', 
     scope: { chatMessagesOfUser: '=' }, 
     link: link 
    }; 
    return directive; 

    //////////// 

    function link(scope, element, attr) { 
     console.log(element); 
     element.on('scroll', function() { 
      if(element[0].scrollTop <= 0) { 
       scope.chatMessagesOfUser.splice(1, 4); 
       scope.$apply(); 
      } 
     }); 
     } 
    } 
})(); 

Beachten Sie auch, dass, wenn Sie eine Richtlinie über einen Umfang Variable zuweisen, die 2-Wege-gebunden ist, müssen Sie nicht den Variablennamen müssen nach dem = wenn es der gleiche Name.

+0

Vielen Dank für die Antwort – quma

Verwandte Themen