2015-09-27 201 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