denetleyicilerini tanımlamanın asıl yolu ile, ana kapsamın erişiminin önemsiz olması nedeniyle, çocuk kapsamı prototip olarak üst öğesinden devraldığı için.Devralınan kapsamı denetleyiciye erişim Yaklaşım
app.controller("parentCtrl", function($scope){
$scope.name = "Parent";
})
.controller("childCtrl", function($scope){
$scope.childName = "child of " + $scope.name;
});
<div ng-controller="parentCtrl">
{{name}}
<div ng-controller="childCtrl">
{{childName}}
</div>
</div>
Kontrolör-As yaklaşım bir denetleyici bildirmek için recommended yol olarak görünmektedir. Ancak Controller-As ile, yukarıdaki yaklaşım artık çalışmaz. Bu (spagetti kod potansiyeli) ile bazı sorunları var
<div ng-controller="parentCtrl as pc">
{{pc.name}}
<div ng-controller="childCtrl as cc">
{{cc.childName}}
</div>
</div>
, ancak bu soru gelen ana kapsamını erişen hakkındadır:
Tabii, adlı pc.name
ile ebeveyn kapsamını erişebilir çocuk denetleyicisi. Bu çalışma görebilirsiniz
tek yoludur:
app.controller("parentCtrl", function(){
this.name = "parent";
})
.controller("childCtrl", function($scope){
$scope.pc.name = "child of " + $scope.name;
// or
$scope.$parent.pc.name = "child of " + $scope.name;
// there's no $scope.name
// and no $scope.$parent.name
});
Şimdi, çocuk kontrolör "
pc
" hakkında bilmek gerekiyor - bu (my mind) görünümüne sınırlandırılması gerektiğini hariç. Bir çocuğun kontrolör bir görünümü bir
ng-controller="parentCtrl as pc"
ilan etmeye karar verdi gerçeği hakkında bilmek gerektiğini düşünüyorum.
S: doğru yaklaşım daha sonra ne var?
DÜZENLEME:
Açıklama: Ben bir üst denetleyicisi miras aramıyorum. Paylaşılan kapsamı miras almaya/değiştirmeye çalışıyorum.
app.controller("parentCtrl", function($scope){
$scope.someObj = {prop: "not set"};
})
.controller("childCtrl", function($scope){
$scope.someObj.prop = "changed";
});
Angular'ın "denetleyicileri" gerçekten bir "yardımcı yardımcı" ya da "görünüm modelidir". 'ControllerAs' kullanılmasını öneren stil kılavuzları, 'pc' yi doğrudan ya da bu durumla ilgili olarak kullanmanıza teşvik eder. "ParentCtrl" ve "childCtrl" arasında bir miras zinciri kurabileceğinizi varsayalım. childCtrl.prototype = Object.create (parentCtrl.prototype) 've daha sonra' childCtrl 'yapıcınızdaki 'this.name', onu gölgelemeden önce ebeveynin adına başvurur. – Sacho