Với cách ban đầu để xác định bộ điều khiển, việc truy cập phạm vi của cha mẹ là khá tầm thường, vì phạm vi con được thừa kế từ cha mẹ.Truy cập phạm vi được thừa kế với Bộ điều khiển Theo cách tiếp cận
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>
Controller-As cách tiếp cận có vẻ là recommended cách để khai báo một bộ điều khiển. Nhưng với Controller-As, cách tiếp cận trên không còn hoạt động nữa.
Chắc chắn, tôi có thể truy cập vào phạm vi phụ huynh với pc.name
từ Xem:
<div ng-controller="parentCtrl as pc">
{{pc.name}}
<div ng-controller="childCtrl as cc">
{{cc.childName}}
</div>
</div>
tôi có một số vấn đề với điều này (tiềm năng cho mì spaghetti code), nhưng câu hỏi này là về việc truy cập phạm vi cha mẹ từ bộ điều khiển con.
Cách duy nhất tôi có thể thấy làm việc này là:
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
});
Vì vậy, bây giờ, điều khiển con cần biết về "pc
" - ngoại trừ, điều này sẽ (trong tâm trí của tôi) bị hạn chế để xem. Tôi không nghĩ rằng một người điều khiển trẻ em nên biết về thực tế là một quan điểm quyết định tuyên bố một ng-controller="parentCtrl as pc"
.
Q: Cách tiếp cận đúng là gì?
EDIT:
Làm rõ: Tôi không tìm cách để thừa kế một bộ điều khiển cha mẹ. Tôi đang tìm cách kế thừa/thay đổi phạm vi chia sẻ. Vì vậy, nếu tôi đã sửa đổi các ví dụ đầu tiên, tôi sẽ có thể làm như sau:
app.controller("parentCtrl", function($scope){
$scope.someObj = {prop: "not set"};
})
.controller("childCtrl", function($scope){
$scope.someObj.prop = "changed";
});
"Bộ điều khiển" của Angular thực sự là một "trình trợ giúp xem" hoặc "mô hình xem". Các hướng dẫn kiểu gợi ý sử dụng 'controllerAs' tích cực khuyến khích bạn sử dụng' pc' trực tiếp hoặc tô bóng trong tình huống này. Tôi cho rằng bạn có thể thiết lập chuỗi thừa kế giữa 'parentCtrl' và' childCtrl', ví dụ: 'childCtrl.prototype = Object.create (parentCtrl.prototype)' và sau đó trong constructor 'childCtrl' của bạn,' this.name' sẽ chỉ đến tên của cha mẹ trước khi bạn tô bóng nó. – Sacho