2016-02-10 19 views
13

Here, yazar aynı için

the $scope object used by the two controllers are not the same $scope object 

Snippet'ini bahseder:

enter image description here

enter image description here

Şimdi yukarıdaki koda biraz değişiklik düşünün.
<body ng-app="myapp"> 
    <div ng-controller="myController1"> 

     <div>{{data.theVar}}</div> 
     <div>{{data.common}}</div> 

     <div ng-controller="myController2"> 
      <div>{{data.theVar}}</div> 
      <div>{{data.common}}</div> 
      <div>{{temp}}</div> 
      <div>{{newTemp}}</div> 
     </div> 

    </div> 
    <script> 
     var module = angular.module("myapp", []); 
     var myController1 = module.controller("myController1", function($scope) { 
      $scope.data = { 
       theVar : "Value One", 
       common : "common Value" 
      }; 

      $scope.temp = "John Wick 2 is going to be released soon"; 
     }); 

     var myController2 = module.controller("myController2", function($scope) { 
      $scope.data = { 
       theVar : "Value Two" 
      }; 

      $scope.newTemp = $scope.temp; 
      console.log(""); 

     }); 
    </script> 
</body> 

controller2 karşılık gelen görüntü

controller1 için iç görünüm taşınmıştır. controller2 içindeki kod parçası için

,

$scope.newTemp = $scope.temp; 

enter image description here

$ kapsam tek ve aynı nesne üzerinde vurgulanan musunuz?

Evet, AngularJS bunu nasıl biliyor?

, controller2 içinde $scope.temp öyleyse $scope.newTemp tanımsız ve olacağını aynı olsaydı?

Benim için onlar o/p yukarıda programı dikkate alındığında, aynı değildir. Aşağıya bakın:

enter image description here

Ama sonra olmak ikisi de çıkar neden olarak çapraşık bir & ben hata ayıklama aynı, $scope.temp değerini erişebilir angularjs yapar nasıl enter image description here

controller2'deki controller1'den mi?
Lütfen açıklayınız?

Son olarak,

iki kontrolörleri kullanılan $scope aynı olmadığını doğrudur Taşıyamazsınız

enter image description here

cevap

10

, onlar birbirinden'ın özelliklerini devralabilir. Açısal $scope s bir ağaç gibidir, gövde $rootScope ve diğer $scope ve diğer $scope arasındaki diğer $scope, myController2myController1 bir çocuk olduğundan, içindeki değişkenlere erişebilirsiniz.

$rootScope -> myController1 -> myController2 

myController2

myController1 $rootScope erişebilir, tüm üst $scope s erişebilir ve $rootScope sadece kendisini erişebilir.

+0

Neden Google Chrome hata ayıklayıcı göstergesini $ controller2 kapsamındaki özellikler ($ controller of controller1 ile ilgili) göstermiyor? –

+3

Yapıyor, ama içinde '__proto__' –

+0

Martijn: Oh, evet. Bu temel nokta farketmedi. Peki, aynı şey için teşekkür ederim. –

3

Son bölümünüz için, her iki denetleyicinin de data adına göre özelliği varsa, açısal önce geçerli kapsamı inceleyecek ve ardından hiyerarşik olarak yukarı çıkacaktır, yani üst öğenin kapsamı. Bu nedenle, açısal açı, data'un ikinci denetleyicinin kapsamının kendisinde bulunduğunu ve dolayısıyla ebeveynin kapsamının data değişkenini belirtmesine gerek duymaz. Ancak, bu özelliğin içinde common anahtar yoktur ve bu nedenle hiçbir şey çıkmaz.

controller as açısal sözdizimini inceleyiniz, bu çakışmaların körfezde kalması amaçlanmaktadır.

İlgili konular