隔离范围指令:angularjs
问题描述:
我创建了一个指令隔离范围指令:angularjs
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它不停止加载图标。这意味着它不应对变化
我曾尝试使用范围$手表和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);
};
}]);
有人可以指导我如何解决它。
答
您的问题可能是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
您可以链接通过他们和更新范围变量在那里,你将不再需要在超时中包装它。
您需要通过form。$ valid和administrator从modalFooter? – PSL 2014-09-02 19:02:12
即时传递控制器属性administrator.loading = true我设置为false当我得到ajax结果,所以这个属性在控制器中得到改变,但我的指令没有看到变化,并且没有反应它甚至我已经使用attrs $ observe – Salman 2014-09-02 19:05:33
Where is你的ajax和你设置为false的地方?当你点击'save'('ng-click =“onSave()”')你看到你的控制器的'save'函数没有得到任何参数吗? – PSL 2014-09-02 19:06:46