2016-04-27 10 views
0

Ich habe die $ scope-Variable innerhalb der http.get() -Methode des übergeordneten Controllers definiert. Ich kann nicht direkt von Kind Controller zugreifen, weil seine Aussage als undefined. Wenn ich auf diese Bereichsvariable von meinem Child Controller mit der Watch-Funktion zugegriffen habe, funktioniert es gut. Aber für eine größere Anzahl von Scope-Variablen Wie kann ich die Watch-Funktion verwenden Oder gibt es eine andere Möglichkeit, dies ohne Watch zu tun? Ich habe meine Geige hier aktualisiert click here fiddle for accessing more number of parent scope variablesZugreifen auf den übergeordneten Bereich vom untergeordneten Controller mit der Uhr

function ParentCtrl($scope, $http) { 
 
     $scope.cities = ["NY", "Amsterdam", "Barcelona"]; 
 
     
 
     // $scope.example1 = $http.get('/echo/json'); 
 
     $http.get('/echo/json').then(function(value) { 
 
    \t  $scope.example2 = value.status; 
 
    \t \t }); 
 
     $http.get('/echo/json/error').then(null,function(value) { 
 
     $scope.example3 = value.status; 
 
     }); 
 
     $http.get('/echo/json').success(function(data, status, headers, config) { 
 
     $scope.example4 = status; 
 
     }); 
 
     $http.get('/echo/json/error').error(function(data, status, headers, config) { 
 
     $scope.example5 = status; 
 
     });   
 
     $http.get('/echo/json/error').catch(function(value) { 
 
     $scope.example6 = value.status; 
 
     });   
 
     
 
     } 
 
     
 
    function ChildCtrl($scope) { 
 
     $scope.parentcities = $scope.$parent.cities; 
 
    // console.log("1=="+$scope.example1);//undefined 
 
     console.log("2=="+$scope.example2);//undefined 
 
     console.log("3=="+$scope.example3);//undefined 
 
     console.log("4=="+$scope.example4);//undefined 
 
     console.log("5=="+$scope.example5);//undefined 
 
     console.log("6=="+$scope.example6);//undefined 
 
     
 
     
 
     
 
     /*$scope.$watch("example1", function(example1) { 
 
     if(angular.isDefined(example1)){ 
 
     console.log("1_watch=="+$scope.example1); //Defined 
 
     } 
 
     });*/ 
 
     $scope.$watch("example2", function(example2) { 
 
     if(angular.isDefined(example2)){ 
 
     console.log("2_watch=="+$scope.example2); //Defined 
 
     } 
 
     }); 
 
     $scope.$watch("example3", function(example3) { 
 
     if(angular.isDefined(example3)){ 
 
     console.log("3_watch=="+$scope.example3); //Defined 
 
     } 
 
     }); 
 
     $scope.$watch("example4", function(example4) { 
 
     if(angular.isDefined(example4)){ 
 
     console.log("4_watch=="+$scope.example4); //Defined 
 
     } 
 
     }); 
 
     $scope.$watch("example5", function(example5) { 
 
     if(angular.isDefined(example5)){ 
 
     console.log("5_watch=="+$scope.example5); //Defined 
 
     } 
 
     }); 
 
     $scope.$watch("example6", function(example6) { 
 
     if(angular.isDefined(example6)){ 
 
     console.log("6_watch=="+$scope.example6); //Defined 
 
     } 
 
     }); 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.10/angular.min.js"></script> 
 
    <div ng-app ng-controller="ParentCtrl"> 
 
     <div ng-controller="ChildCtrl as vm"> 
 
      {{$parent.cities}} 
 
     </div> 
 
    </div>

+0

Ihr Fiddle Link ist kein Hyperlink. Können Sie bitte bearbeiten – Maverick

+0

@Maverick können Sie jetzt überprüfen plz mit dem hier klicken – VVijay

Antwort

0

Sie sollten Uhr und $ parent in diesem Fall nicht werden.

Ereignisse ($ broadcast) können im übergeordneten Controller verwendet werden, um dem untergeordneten Controller mitzuteilen, dass der Wert abgerufen wurde und verwendet werden kann.

$scope.$broadcast("example1",$scope.example1) //parent controller 

$scope.$on("example1",function(data){ 
    // Do stuff 
}) //child controller 

Meine bevorzugte Methode besteht darin, die Daten in einer Fabrik zu speichern, wenn sie über Controller verteilt werden müssen.

Wenn Sie aus irgendeinem Grund die $ watch noch brauchen, können Sie die Uhr nach dem Abrufen der Daten beenden, so dass sie nicht mehr ausgeführt wird. Dies kann durch Verwendung des von $ watch() zurückgegebenen Callbacks erfolgen.

var killExample4 = $scope.$watch("example4", function(example4) { 
    if(angular.isDefined(example4)){ 
    console.log("4_watch=="+$scope.example4); //Defined 
    killExample4(); 
    } 
}); 
+0

Wie kann ich mehr Anzahl von Scope-Variablen auf diese Weise zugreifen ??? var killExample4 = $ scope. $ watch ("beispiel4", funktion (beispiel4) { if (angular.isDefined (example4)) { console.log ("4_watch ==" + $ scope.example4); // Definiert killExample4(); } }); var killExample3 = $ scope. $ watch ("Beispiel3", Funktion (Beispiel3)) { if (angular.isDefined (Beispiel3)) { console.log ("3_watch ==" + $ scope.example3); // Definiert killExample3(); } }); ..... etc Ist das der richtige Weg ??? – VVijay

+0

Sie können die Variablen in der Fabrik halten und in beide Controller – Maverick

+0

k injizieren k wird mit Winkelservice versuchen – VVijay

Verwandte Themen