2015-09-27 218 views
0

调用控制器功能我有一个关于控制器和指令之间的函数可见性的问题。我有一个控制器和一个指令。该指令看起来像这样AngularJS控制器 - 指令 - >从指令

(function() { 
'use strict'; 

angular 
    .module('myproject.schedule') 
    .directive('dirname', dirname); 

function dirname() { 
    var directive = { 
     restrict: 'A', 
     replace: true, 
     scope: { 
      currentDateScheduler: "=", 
      ... 
     }, 
     controller: DirnameController, 
     controllerAs: 'vm', 
     bindToController: true, 
     templateUrl: ... directive.html 

我的控制器看起来是这样的:

(function() { 
'use strict'; 

angular 
    .module('myproject.schedule') 
    .controller('MyController', MyController); 
... 

在directive.html文件我有一个NG单击它调用我的控制器的功能 - 这工程精细。

其实现在我不知道为什么?我认为一个指令有它自己的命名空间,我的控制器的功能在... directive.html中不可见。

非常感谢您的帮助!

+2

显示如何在ngClick中调用函数。 – dfsq

+0

发布完整的最小示例。 –

回答

0

控制器作用域可用于任何在声明了控制器的DOM元素内作为子项出现的指令。例如。

<div ng-controller="ctrl1"> 
    <dirname></dirnam> <!-- this has access to ctrl1 scope --> 
</div> 

所以,如果你要在另一个控制器内使用指令,它将有权访问该控制器的作用域。这意味着如果控制器中不存在函数,那么在ng-click下声明的指令将不会执行任何操作。

在指令中你可以声明一个控制器,在这个控制器中声明的任何东西都会覆盖指令中同名控制器函数。例如。

angular.module('myApp',[]) 
.controller('myController',function($scope){ 
    $scope.clickMe = function(){ 
     alert('clicked from the controller'); 
    } 
}) 
.directive('dirname', function(){ 
    return { 
     controller: function($scope){ 
      $scope.clickMe = function(){ alert('clicked from directive'); }; 
     }, 
    }; 
}); 

控制器也可以嵌套。在这种情况下,作用域再次具有自上而下的效果,从而在最上面的控制器中定义的函数可用于包含在子控制器中的dom元素。此外,如果此子控制器具有相同的声明函数,则这些将覆盖父控制器的功能。

希望这会有所帮助

+0

非常感谢!这非常有用! – quma