我有一个类似这样的模板:
<parent-directive>
<child-directive binding="varFromParent"></child-directive>
<button ng-click="parentDirective.save()"></button>
</parent-directive>
在parentDirective
控制器中执行函数时,是否可以访问和操作childDirective
的范围变量,例如angular.module('app').directive('parentDirective', function() {
return {
restrict: 'E',
templateUrl: '...',
controllerAs: 'parentDirective',
controller: function($rootScope, $scope) {
//...
this.save = () => {
//Need to manipulate childDirective so that its
//scope.defaultValue == 'NEW DEFAULT'
}
}
}
});
。如果我将它们设置为如此
angular.module('app').directive('childDirective', function() {
return {
restrict: 'E',
templateUrl: '...',
scope: {
binding: '='
},
controllerAs: 'childDirective',
link: function(scope, elm, attrs) {
scope.defaultValue = 'DEFAULT';
}
}
});
和
<child-directive>
我该怎么做呢?有没有办法在不设置双向绑定的情况下执行此操作?如果可能的话,我想避免{{1}}元素上的混乱属性。
答案 0 :(得分:0)
有很多方法可以在孩子和父母指令之间建立沟通:
双向绑定(就像你说的那样)
在您的父母中注册您的孩子。
您可以使用指令require
属性和链接函数controllers
的最后一个参数来在其父级中注册子级。
活动,请参阅$scope.on/broadcast
角色服务(因为它们是&#34;单身&#34;,它很容易用它来在您的指令之间共享数据)
< / LI> 醇>等
2的示例:
angular.module('Example', [])
.directive('parent', [function () {
return {
controller: function (){
// registerChildren etc
}
// ...
};
}])
.directive('children', [function () {
return {
require: ['^^parent', 'children'],
controller: function (){
// ...
}
link: function ($scope, element, attributs, controllers) {
ParentController = controllers[0];
OwnController = controllers[1];
ParentController.registerChildren(OwnController);
// ...
}
// ...
};
}])
答案 1 :(得分:0)
在这种情况下,您可能不需要隔离儿童的指令范围。定义一个你需要在父范围内改变的变量,然后子指令范围将继承这个值,这样你就可以在子指令中更改它的值,并且可以从父节点访问它。
student.setName("")
这是小提琴 {{3}}