AngularJS - 将控制器api暴露给指令

时间:2014-04-11 12:00:28

标签: angularjs

如何使指令对控制器功能可见?我是否将方法附加到范围,并将范围注入指令?首先是一个好主意吗?我想在UI中操作模型数据。

3 个答案:

答案 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 +控制器可以为指令隔离范围提供正确的参数,您就可以在任何视图中使用该指令。