我有一个指令设置是这样的:angularjs bindToController不能调用方法
angular.module('widget.directives').directive('applePay', applePay);
function applePay() {
return {
restrict: 'A',
controller: 'ApplePayController',
controllerAs: 'controller',
scope: {
onCheckComplete: '&applePay'
},
bindToController: true,
templateUrl: 'app/directives/apple-pay/apple-pay.html',
link: function (scope, element, attrs, controller) {
element.find('button').bind('click', controller.checkout);
}
};
};
而且它的控制器是这样的:
angular.module('widget.directives').controller('ApplePayController', applePayController);
applePayController.$inject = ['applePayService'];
function applePayController(applePayService) {
var self = this;
// Method binding
self.checkout = checkout;
init();
//////////////////////////////////////////////////
function init() {
applePayService.checkAvailability(setAvailability);
};
function setAvailability(available) {
self.available = available === true;
console.log(self);
self.onCheckComplete({ available: self.available });
};
function checkout(e) {
applePayService.checkout(e, onComplete, onError);
};
function onComplete(result, completion) {
console.log(result, completion);
};
function onError(error) {
self.error = error;
};
};
我的这个网站是这样的:
<div apple-pay="controller.applePayAvailable(available)"></div>
当指令加载时出现错误:
TypeError: self.onCheckComplete is not a function
有谁知道为什么? 我有一个类似的指令,工作正常。
在函数'setAvailability'中调用了这个函数'self.onCheckComplete({available:self.available});'但它看起来并没有在控制器里面定义 – quirimmo
不,实际上我已经知道了。这是因为在将范围绑定到控制器之前,在控制器中调用init。我不得不将init方法添加到链接方法 – r3plica
这不是1.6中推荐的方法。 – TSmith