Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 为什么我必须为&;需要控制器;用指令表达?_Angularjs - Fatal编程技术网

Angularjs 为什么我必须为&;需要控制器;用指令表达?

Angularjs 为什么我必须为&;需要控制器;用指令表达?,angularjs,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',fun

这项工作:

<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()" />'
  }
})

angular.module('myApp')
.controller('AppCtrl',函数($scope){
$scope.callHome=函数(){
警报('已调用')
}
})
.directive('phone',function(){
返回{
范围:{
拨号:'&'
},
模板:“”
}
})
但这是行不通的:

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

angular.module('myApp')
.directive('phone',function(){
返回{
范围:{
拨号:'&'
},
模板:“”,
控制器:功能($scope){
$scope.callHome=函数(){
警报('已调用')
}
}
}
})
为什么?


我希望在指令中使用方法,而不使用父控制器,这样它将位于自己的隔离作用域中。

它正在父作用域中搜索表达式。但是您没有父作用域,而是具有相同的作用域

    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'
      }
    })
angular.module('myApp')
.directive('phone',function(){
返回{
范围:{
},
模板:“”,
控制器:函数(){
this.callHome=函数(){
警报('已调用')
}
},
controllerAs:'ctrl'
}
})

这应该可以工作。

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


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

对不起,我不适用。导致错误。“请求新的/隔离的作用域打开”查看是一个空对象,这样您就有了一个隔离的作用域。因此,页面上可以有多个指令,每个指令都有其作用域,控制器方法类似于java中类的静态方法。