为什么我需要一个控制器用于&在指令中表达?

时间:2015-03-25 10:22:26

标签: angularjs

这有效:

<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.')
      }
    }
  }
})

为什么?

我想在没有父控制器的情况下使用指令中的方法,因此它将位于自己的隔离范围内。

2 个答案:

答案 0 :(得分: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'
      }
    })

这应该有效。

答案 1 :(得分:0)

使用父作用域设置

&表达式,因此无法通过创建新作用域或隔离作用域来使用这些方法。

您必须使用父作用域来处理&表达式。