从指令访问角度控制器

时间:2014-04-09 11:45:23

标签: angularjs angularjs-directive

当我在html中有一个控制器时

<div ng-controller="myController" id="myCtrl">...</div>

我可以通过以下方式访问它:

angular.element(myCtrl).controller()

但是如何从指令访问控制器?

 directive('myDirective', function () {
    return {
        ...
        templateUrl: '/Views/myview.html',
        controller: myController
    }
})

1 个答案:

答案 0 :(得分:0)

此控制器应定义与定义指令的模块模块相同:

E.g

angular.module('myModule', [])
.controller('myController',['$scope', function($scope){
     $scope.myData = {'someData':1337};
}])

.directive('myDirective', [function(){
    return {
        ...
        templateUrl: '/Views/myview.html',
        controller: 'myController'
    }
}])

这是一个傻瓜,展示了这种方式:

http://plnkr.co/edit/UDCWUI5EMlfoXb9u3GYh?p=preview

这里有一个plunkr,演示了在模块中使用另一个模块中定义的控制器的指令:

http://plnkr.co/edit/Gg0BzKPOqO2NnTgf3Hkr?p=preview

angular.module('myApp',[
])
.controller('MyController', ['$scope', function($scope){
   $scope.someValue = 'someValueFromController';
}])

angular.module('otherModule', ['myApp'])

.directive('myDirective', [function(){
    return {
      restrict: 'E',
      templateUrl: 'someTemplate.html',
      controller: 'MyController'
   }
}])

或者,您可以使用$controller服务使用适当的东西来实例化控制器并在任何地方使用它(从导入定义控制器的模块的每个模块)。