Javascript 服务异步更新值
我有一个对话框控制器:Javascript 服务异步更新值,javascript,angularjs,angular-material,Javascript,Angularjs,Angular Material,我有一个对话框控制器: .controller('loadingDialogCtrl', function($scope, $mdDialog, $rootScope, loadingDialog) { $scope.loadingDialog = loadingDialog; }); 在我的另一个控制器中,我显示此对话框控制器,并通过加载DialogService对其进行操作: .controller('myCtr', function($scope, $mdDialog, load
.controller('loadingDialogCtrl', function($scope, $mdDialog, $rootScope, loadingDialog) {
$scope.loadingDialog = loadingDialog;
});
在我的另一个控制器中,我显示此对话框控制器,并通过加载DialogService
对其进行操作:
.controller('myCtr', function($scope, $mdDialog, loadingDialog) {
$mdDialog.show({
controller: 'loadingDialogCtrl',
templateUrl: 'tmpl/loadingDialog.tmpl.html'
});
loadingDialog.status = "Formatting...";
})
加载对话框
服务:
angular.module('LoadingDialogService', []).service('loadingDialog', function ($mdDialog) {
this.progress = 0;
this.status = "Loading data from board...";
this.additionalStatus = "";
this.mode = "determinate";
return {
progress: this.progress,
status: this.status,
additionalStatus: this.additionalStatus,
mode: this.mode
}
});
这个很好用。但例如,如果我在异步函数中更改服务值,我的对话框视图不会更新:
//progress bar inside dialog have changed
loadingDialog.progress = 55;
setTimeout(function () {
//progress bar inside dialog didn't change
loadingDialog.progress = 55;
}, 10)
setTimeout()
超出angular的摘要周期,因此视图值不会更新。改用$timeout()
。($timeout)setTimeout()
超出angular的摘要周期,因此视图值不会更新。改用$timeout()
。($timeout)在加载对话框Ctrl
中,而不是
$scope.loadingDialog = loadingDialog;
你应该使用
$rootScope.$watch(function() {
return loadingDialog;
}, function(loadingDialogValue) {
$scope.loadingDialog = loadingDialogValue;
}, true);
或者(更优雅的解决方案)
在
加载对话框中,按Ctrl
而不是
$scope.loadingDialog = loadingDialog;
你应该使用
$rootScope.$watch(function() {
return loadingDialog;
}, function(loadingDialogValue) {
$scope.loadingDialog = loadingDialogValue;
}, true);
或者(更优雅的解决方案)
值被100%更改,因为console.log(loadingDialog.progress)打印progress值更改,但摘要循环不会运行,这意味着HTML中的值不会更新。使用$timeout应该可以解决这个问题,除非还有其他问题。能否将对话框视图添加到帖子中?@Arti$timeout是正确的解决方案。考虑是否由于某种原因而不起作用。目前尚不清楚在您的案例中如何使用
loadingDialog
。值已100%更改,因为console.log(loadingDialog.progress)打印进度值更改-但摘要周期不运行,这意味着您的HTML中的值不会更新。使用$timeout应该可以解决这个问题,除非还有其他问题。能否将对话框视图添加到帖子中?@Arti$timeout是正确的解决方案。考虑是否由于某种原因而不起作用。不清楚在您的案例中如何使用加载对话框
。