我有一個指令設置是這樣的: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