2015-03-25 45 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

&表达式是用父范围设置的,因此无法通过创建新范围或独立范围来处理这些方法来处理这些方法。

您必须使用父范围与&表达式一起使用。

相关问题