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中类的静态方法。