2015-03-25 65 views
0

這工作:爲什麼我需要一個控制器來在指令中表達?

<div ng-controller="AppCtrl"> 
<div phone dial="callHome()"></div> 
</div> 

angular.module('myApp') 
.controller('AppCtrl',function($scope){ 
    $scope.callHome = function(){ 
    alert('called.') 
    } 
}) 
.directive('phone',function(){ 
    return { 
    scope: { 
     dial: '&' 
    }, 
    template: '<input type="button" ng-click="dial()" />' 
    } 
}) 

但是,這是行不通的:

<div phone dial="callHome()"></div> 



angular.module('myApp') 
.directive('phone',function(){ 
    return { 
    scope: { 
     dial: '&' 
    }, 
    template: '<input type="button" ng-click="dial()" />', 
    controller: function($scope){ 
     $scope.callHome = function(){ 
     alert('called.') 
     } 
    } 
    } 
}) 

爲什麼?

我想在指令中使用方法而沒有父控制器,所以它會在它自己的隔離範圍內。

回答

0

它在父範圍中搜索表達式。但是你沒有父範圍,而是你有相同的範圍。

angular.module('myApp') 
    .directive('phone',function(){ 
     return { 
     scope: { 
     }, 
     template: '<input type="button" ng-click="ctrl.callHome()" />', 
     controller: function(){ 
      this.callHome = function(){ 
      alert('called.') 
      } 
     }, 
     controllerAs: 'ctrl' 
     } 
    }) 

這應該工作。

+0

對不起,沒有爲我工作。導致錯誤。 「要求新的/隔離的範圍」 – 2015-03-25 10:39:18

+0

看看這是一個空的對象,你有一個孤立的範圍。所以你可以在你的頁面上有多個指令,每個指令都有它的作用域,控制器方法就像java中一個類的靜態方法。 – Raulucco 2015-03-25 10:50:46

+0

爲了測試目前我只有一個,但仍然沒有運氣... – 2015-03-25 10:53:36

0

&表達式是用父範圍設置的,因此無法通過創建新範圍或獨立範圍來處理這些方法來處理這些方法。

您必須使用父範圍與&表達式一起使用。

相關問題