我有一個指令作爲信用卡的形式。這種形式可以有許多不同的提交按鈕。在購買期間,這是異步,我需要確保按鈕被禁用。所以我使用一個簡單的觀察者模式來實現這一點。我遇到的問題是,當用戶單擊按鈕時,觀察者模式正在正常工作,控制ng-disable的隔離範圍屬性被正確設置,但禁用不會被應用到按鈕。我在想這可能是一個優先事項?按鈕裏面的指令不被禁用
因此,繼承人是觀察員。這個主題相當平凡。只需驗證一個表單,並有一個觀察者列表。這是我遇到的問題。
.directive('submitCardButton', ['$q', function ($q) {
return {
restrict: 'E',
require: '^createCard',
scope: {
successBack: '&',
buttonVal: '@'
},
template: "<button class='button button-pink full-width small-top' ng-class=\"{disabled: submitting}\" ng-click='getCC()' ng-disabled=\"submitting\">{+ submitting +} {+ buttonVal +}</button>",
link: function (scope, elem, attr, card) {
card.registerButton(scope);
scope.submitting = false;
function getCC() {
card.disableButtons();
card.getCC().then(function (response) {
$q.when(scope.successBack({response:response}))
.finally(card.enableButtons);
}, function() {
card.enableButtons();
});
}
scope.disable = function() {
scope.submitting = true;
console.log(scope.submitting);
};
scope.enable = function() {
scope.submitting = false;
console.log(scope.submitting);
};
scope.getCC = getCC;
} // end link
};// end return
}])// end directive
當我調試時,在getCC內部,在我調用disableButtons之後,submitting被設置爲true。保證模板內部的提交仍然是錯誤的,因此不會被禁用。任何幫助將非常讚賞。
我創建了一個演示我遇到的問題的plunkr。我正在使用一個簡單的用戶名姓來顯示問題。如果您正確提交,它工作正常。但是,如果您只是在不提交任何數據的情況下提交,則可以看到button指令中的提交標誌設置爲True,但禁用的設置不正確。 http://plnkr.co/edit/8KTUCNMPBRAFVl1N4nXp?p=preview
我不明白 - 你叫'card.disableButtons()' - 它有什麼作用?這似乎對這個問題至關重要,但是這個代碼卻沒有。 – 2014-12-19 06:52:56
我加了一個plunk。如果你提交了一個好名字,它可以正常工作,但是如果你提交了一個錯誤的名字,「submitting」標誌被設置爲true,但是沒有在按鈕上設置禁用。你可以看到這個,如果你打開你的控制檯,看看輸出。 – user2734679 2014-12-19 20:26:32