我有一个配置文件更新指令,我想从父作用域触发更新操作。 这看起来像我的代码:
main.js
angular.module('app')
.directive('profile',{
scope: {
updateFromDirective: "="
},
template: '<form><input ng-model="name"/></form>',
controller: function(){
this.updateFromDirective = function(){
/* update here */
};
}
})
.controller('Ctrl', function(){
this.updateFromController = function(){
if(condition){
/* how do I call updateFromDirective here ??? */
}
};
});
的index.html
<div ng-controller="Ctrl">
<profile updateFromDirective="updateFromController"></profile>
<button ng-click="updateFromController()">Update</button>
</div>
答案 0 :(得分:2)
如果您正在使用'&'
传递您的函数参考指令updateFromController()
,请'='
使用updateFromController
(两者都可以)
现在就在你的情况下
注意: 我假设你不想使用$ scope,因为你在控制器中有你的功能
要从指令调用控制器函数,您需要将其作为回调传递,并可以调用该回调,如下所示
angular.module('app',[])
.controller('Ctrl', function(){
this.updateFromController = function(){
alert('In Contrller')
};
}).directive('profile',function(){
return{
scope:{
controllercallback: "&"
},
template:'<input ng-model="name"/><br/><button ng-click="ctrl.updateFromDirective()">Update</button>',
controller:function(){
this.updateFromDirective=function(){
alert('In Directive')
this.controllercallback();
}
},
bindToController: true,
controllerAs:'ctrl'
}
})
你的html应该如下所示
<div ng-controller="Ctrl as vm">
<profile controllercallback="vm.updateFromController()"></profile>
但是这里你的按钮在指令本身。
如果您不希望您的按钮成为指令的一部分,您可以使用由角度给出的发布/订阅者模型,如下所示
angular.module('app',[])
.controller('Ctrl', function($scope){
this.updateFromController = function(){
$scope.broadcast('calldirective');
};
}).directive('profile',function(){
return{
template:'<input ng-model="name"/>',
controller:function($scope){
$scope.$on('calldirective', function() {
alert('In Directive')
});
}
}
})