我有指令/控制器的定义。如果你看,有onClick
函数定义。调用函数时,它可以看到this
变量,ftConditionButton
绑定directive
,如onClick
所述。问题是,conditionButtonController
没有看到 angular
.module('app')
.directive('ftConditionButton', ftConditionButton);
function ftConditionButton() {
var directive = {
restrict: 'A',
scope: {},
require: ['ftConditionButton'],
templateUrl: 'conditionButton.html',
controller: ConditionButtonController,
controllerAs: 'conditionButtonController',
bindToController: {
ftConditionButton: '&'
}
};
return directive;
}
function ConditionButtonController() {
var conditionButtonController = this;
conditionButtonController.onClick = onClick;
////////////////
function onClick() {
this.ftConditionButton; // this works
conditionButtonController; // conditionButtonController is undefined
}
}
,这违反了我对JavaScript的理解。有人可以向我解释我错过了什么吗?现在它看起来像一个新的" Class"创建并获得了原始控制器的所有方法。
$client_ip

答案 0 :(得分:0)
不确定你做错了什么。好像对我来说。
我可以推荐几件事:
1)确保您使用angularjs-1.4。
2)始终将所有内容都包装到本地函数中,这样您就不会在全局范围内公开任何内容。
(function() {
angular.module('experiment', [])
.controller('MyController', function($scope){
$scope.test = function() {
alert("Test!");
};
});
angular
.module('experiment')
.directive('ftConditionButton', ftConditionButton);
function ftConditionButton() {
var directive = {
template: '<button ng-click="conditionButtonController.onClick()">Hello </button>',
restrict: 'A',
scope: {},
bindToController: {
ftConditionButton: '&'
},
controller: ConditionButtonController,
controllerAs: 'conditionButtonController',
};
return directive;
}
function ConditionButtonController($scope) {
var conditionButtonController = this;
conditionButtonController.onClick = onClick;
function onClick() {
conditionButtonController.ftConditionButton();
}
}
})();
并查看:
<div ng-app="experiment">
<div ng-controller="MyController">
<div ft-condition-button="test()" />
</div>
</div>
PS,下次使用JSFiddle来证明您的问题。