【发布时间】:2014-09-02 18:52:16
【问题描述】:
我已经创建了一个指令
adocsModule.directive('modalFooter', function (globalService) {
return {
restrict: 'AE',
replace: true,
scope: {
'onSave': '&',
'onClose': '&',
'loading': '='
},
template: '<div class="modal-footer">' +
' <div class="pull-right">' +
'<button type="submit" ui-ladda="loading" class="button-save ladda-button" ng-click="onSave()" data-style="expand-right">' +
'<span class="ladda-label">{{saveText}}</span>' +
'</button>' +
' <button class="button-cancel" ng-click="onClose()">{{cancelText}}</button>' +
' </div> </div>',
link: function (scope, element, attrs, ctrl) {
scope.saveText = attrs.savetext;
scope.cancelText = attrs.canceltext;
}
};
});
使用这个
<modal-footer loading="administrator.loading" on-save="administrator.save()" on-close="administrator.cancel()"></modal-footer>
当我按下保存时在我的控制器中。 administrator.loading = true 它显示加载图标但在回调时我执行 administrator.loading = false 它不会停止加载图标。这意味着它不会对变化做出反应
我尝试使用 scope.$watch 和 attrs.$observe 但问题在于它在开始时开始显示加载图标并且它没有回到手表中:S
Module.controller('AdminstratorController', ['$scope', function ($scope) {
administrator.save = function () {
administrator.loading = true;
var callback = function () {
administrator.loading false;
}
setTimeout(function () {
administratorService.updateAdministrator( callback);
}, 1000);
};
}]);
有人可以指导我如何解决它。
【问题讨论】:
-
需要从modalFooter传入form.$valid和administrator?
-
我正在传递控制器属性 administrator.loading = true,当我得到 ajax 结果时我设置为 false,所以这个属性在控制器中被更改,但我的指令没有看到更改,即使我使用过也没有反应attrs.$observe
-
你的ajax在哪里以及你设置为false的地方?此外,当您单击
save(ng-click="onSave()") 时,您是否看到您的控制器save函数没有得到任何参数? -
但是你确定在你的指令第一次起作用时你会得到
loading值吗? -
您需要使用
$timeout而不是setTimeout。('AdminstratorController', ['$scope','$timeout', function ($scope, $timeout) {和$timeout(function () {administratorService.updateAdministrator(callback);}, 1000);当您更新setTimeout内部的某些内容时,Angular 直到下一个摘要周期发生时才知道它。如果你使用$timeoutdigest 循环就会发生。另外,您的 ajax 调用看起来如何,为什么需要 1 秒的超时?您没有使用$http吗?
标签: javascript angularjs angularjs-scope