我创建了一个指令
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它不会停止加载图标。这意味着它不会对变化作出反应
我曾尝试使用范围。$ watch和attrs。$观察但是开始时显示加载图标的问题却出现问题: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);
};
}]);
有人可以指导我如何解决它。
答案 0 :(得分:1)
您的问题可能是setTimeout
,您正在更新setTimeout中的范围变量,它不会触发摘要周期,因此在下一个摘要周期发生之前您将看不到更新。在超时的角度版本中包含您的呼叫,即$timeout
,使用它将在超时完成后触发摘要周期。
Module.controller('AdminstratorController', ['$scope', '$timeout', function ($scope, $timeout) {
administrator.save = function () {
administrator.loading = true;
var callback = function () {
administrator.loading false;
}
$timeout(function () {
administratorService.updateAdministrator( callback);
});
};
}]);
在旁注上我不确定你在回调和使用超时时传递的是什么,如果你使用了承诺并从updateAdministrator
返回(有角度)承诺,你可以链接它们并更新你的范围变量在那里,您将不再需要将它包装在超时中。