2017-06-20 1 views
0

In meinem Winkel directive.js Auslösung ich den Umfang Uhr für eine Eigenschaft ‚appInfo‘ des Controllers definiert haben:Angular „apply“ Änderungen an beobachteten Umfang Eigenschaft nicht „sehen“ Funktion

this.scope_.$watch('ctrl.appInfo', function(newValue, oldValue) { 

Und in der Testfall ich einen Wert für appInfo im Rahmen Einstellung:

scope.$apply(function() { 
    scope.appInfo = [{ 
    language: 'English', 
    name: 'AppName', 
    description: 'description' 
    }]; 
}); 

Aber wenn die obige Anwendung geschieht, wird der Umfang Uhr Methode in der Richtlinie nicht aufgerufen. Kann mir bitte jemand helfen, was ich falsch mache? Ich bin neu in eckigen js, also muss ich etwas Dummes machen.

Antwort

1

Sie müssen das spezifische Attribut in den Daten, die geändert wurden, überwachen. ataching Beispiel, wo ich die appInfo.num mit Intervall ändern und dann ich die Anwendung anwenden, können Sie hier das Beispiel sehen. die Konsole öffnen und Sie werden es dort sehen http://plnkr.co/edit/XGoLmDaSVkL6cEVQnkdh?p=previewworking example

es ist der Controller

angular.module('HelloWorldApp', []) 

    .controller('HelloWorldController', function($scope) { 
     setInterval(function(){ 

     $scope.appInfo.num = Math.floor(Math.random() * 100); 
     $scope.$apply(); 
     } 

     , 3000); 

     $scope.appInfo = { 
     language: 'English', 
     name: 'AppName', 
     description: 'description', 
     num:1 
    }; 

     $scope.$watch('appInfo.num', function(newValue, oldValue) { 
      console.log($scope.appInfo); 
     }); 
}); 
1

Ihr Eigentum auf den Umfang gebunden ist, nicht die Steuerung. Sie können die Eigenschaft als erstes Argument der Uhr zurück:

$scope.$watch(function() { 
    return $scope.appInfo; 
    }, 
    function(newValue, oldValue) { 
    console.log('watch fired'); 
}); 

See plunker

Verwandte Themen