Tôi có 3 lồng nhau, cô lập phạm vi, chỉ thị (see CodePen here) và tôi có thể chuyển một hàm (lấy một đối số) từ chỉ thị ngoài cùng đến chỉ thị bên trong nhất từ chỉ thị ngoài đến chỉ thị trung gian tới chỉ thị bên trong).Chuyển các đối số hàm qua nhiều phạm vi biệt lập với các chỉ thị góc
Những gì tôi không hiểu là những gì cần phải được thực hiện để chuyển đối số từ chỉ thị bên trong trở lại thông qua chỉ thị trung gian trở lại chỉ thị bên ngoài.
Một lần nữa, hãy xem the CodePen example.
Lưu ý: Do chỉ có 2 cô lập phạm vi chỉ thị tôi có thể có được điều này để làm việc với một cái gì đó tương tự như sau ...
angular.module('myApp', [])
.directive('myDir1', function() {
return {
template: '<div><my-dir-2 add-name="addName(name)"></my-dir-2></div>',
controller: function($scope) {
$scope.addName = function(name) {
alert(name); // alerts 'Henry'
};
}
}
})
.directive('myDir2', function() {
return {
scope: {
addName: '&'
},
template: "<span ng-click='addName({name: testName})'>Click to Add {{testName}}!</span>",
controller: function($scope) {
$scope.testName = 'Henry';
}
}
});
Đoạn mã trên mang lại cho tôi một hộp cảnh báo với 'Henry' (giống như tôi mong đợi).
Đó là khi tôi thêm một, trung cấp, cô lập phạm vi chỉ thị thứ ba mà tôi chạy vào vấn đề ...
angular.module('myApp', [])
.directive('myDir1', function() {
return {
template: '<div><my-dir-2 add-name="addName(name)"></my-dir-2></div>',
controller: function($scope) {
$scope.addName = function(name) {
alert(name); // alerts 'Henry'
};
}
}
})
.directive('myDir2', function() {
return {
scope: {
addName: '&'
},
template: '<div><my-dir-3 add-name="addName({name: testName})"></my-dir-3></div>',
}
})
.directive('myDir3', function() {
return {
scope: {
addName: '&'
},
template: "<span ng-click='addName({name: testName})'>Click to Add {{testName}}!</span>",
controller: function($scope) {
$scope.testName = 'Henry';
}
}
});
Mã này mang lại cho tôi một hộp cảnh báo với undefined
...
câu trả lời tuyệt vời, thực sự học được điều gì đó ở đây! những gì tôi không hiểu: ở cấp cao nhất, bạn thường chuyển hàm bên trong khuôn mẫu thông qua 'add-name =" addName (name) "', như trong câu trả lời này: http://stackoverflow.com/a/ 18378602/3779853.Tại sao mức "vượt qua" cao nhất phải là 'add-name =" addName "' không có tham số, trong mẫu 'myDir1'? – Blauhirn
@Blauhirn - nếu bạn cố chuyển nó thành 'add-name =" addName (name) "', hàm 'addName' sẽ thực thi ngay lập tức, và kết quả của hàm sẽ được truyền vào, chứ không phải tham chiếu đến hàm chức năng. – ps2goat