如何使指令对控制器功能可见?我是否将方法附加到范围,并将范围注入指令?首先是一个好主意吗?我想在UI中操作模型数据。
答案 0 :(得分:2)
它真的取决于你想做什么
由于您希望从指令访问控制器的范围,我建议您declare your directive将其范围与父控制器共享,方法是将scope
道具设置为false
:
app.directive('directiveName', function() {
scope: false,
link: function(scope) {
// access foo from the controler's scope
scope.foo;
}
});
答案 1 :(得分:1)
这是一个很好的例子,指示如何将指令连接到控制器
http://jsfiddle.net/simpulton/GeAAB/
<强>指令强>
myModule.directive('myComponent', function(mySharedService) {
return {
restrict: 'E',
controller: function($scope, $attrs, mySharedService) {
$scope.$on('handleBroadcast', function() {
$scope.message = 'Directive: ' + mySharedService.message;
});
},
replace: true,
template: '<input>'
};
});
HOOKUP IN CONTROLLER
sharedService.broadcastItem = function() {
$rootScope.$broadcast('handleBroadcast');
};
查看强>
<my-component ng-model="message"></my-component>
答案 2 :(得分:1)
添加到@ grion_13的答案,范围:true也可以工作,因为它创建了一个新的作用域,它是父作用域的子作用域,因此可以访问父作用域数据。
但真正的可重用指令是使用隔离范围获取输入数据的指令。这样,只要您的html +控制器可以为指令隔离范围提供正确的参数,您就可以在任何视图中使用该指令。