我需要在使用Angular单击后启用/禁用按钮。当用户点击“提交表单”时,它会发出http
个请求。如果发生错误(在catch
内),我想重新启用指令按钮,以便用户可以再次尝试。我有controllerAs
语法和isolateScope
的指令。下面是我的代码(这里简化了);
myCtrl
父控制器(controllerAs为myCtrl
)
vm.submit = function() {
MyService
.update()
.then(function(res) {
// success
})
.catch(function(err) {
vm.error = true;
// error
});
};
使用my-form
指令的父视图
<my-form form-submit='myCtrl.submit()'></my-form>
myForm
指令
function myForm() {
return {
restrict: 'E',
replace: true,
templateUrl: 'myform.html',
scope: {
formSubmit: '&',
},
require: ['form', 'myForm'],
link: function(scope, element, attrs, ctrls) {
var formCtrl = ctrls[0];
var directiveCtrl = ctrls[1];
scope.isButtonDisabled = false;
scope.submit = function() {
scope.submitted = true;
directiveCtrl.submit();
};
},
controller: function($scope, $element, $attrs) {
var vm = this;
// Submit parent function
vm.submit = function() {
vm.formSubmit();
};
},
controllerAs: 'myFormCtrl',
bindToController: true
};
}
angular.module('mymodule')
.directive('myForm', [ myForm ]);
myForm
指令模板
<form name='myForm' novalidate>
// form fields
<button ng-click='submit()' ng-disabled='isButtonDisabled'>Submit Form</button>
</form>
答案 0 :(得分:0)
您可以将承诺传递回子控制器并在那里处理逻辑,而不是在父控制器中解析承诺。这样的事情应该有效:
父:
vm.submit = function() {
return MyService.update().$promise;
};
子:
vm.submit = function() {
vm.formSubmit().then(function(res) {
// success
})
.catch(function(err) {
vm.error = true;
// error
scope.isButtonDisabled = false;
});
}