2017-01-31 3 views
0

У меня есть диалоговое окно контроллер:сервис значение обновления асинхронного

.controller('loadingDialogCtrl', function($scope, $mdDialog, $rootScope, loadingDialog) { 
    $scope.loadingDialog = loadingDialog; 
}); 

В моем другом контроллере я показать это диалоговый контроллер и манипулировать с ним LoadingDialogService:

.controller('myCtr', function($scope, $mdDialog, loadingDialog) { 
    $mdDialog.show({ 
     controller: 'loadingDialogCtrl', 
     templateUrl: 'tmpl/loadingDialog.tmpl.html' 
    }); 
    loadingDialog.status = "Formatting..."; 

}) 

LoadingDialog обслуживание:

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) 

ответ

2

В loadingDialogCtrl вместо

$scope.loadingDialog = loadingDialog; 

вы должны использовать

$rootScope.$watch(function() { 
    return loadingDialog; 
}, function(loadingDialogValue) { 
    $scope.loadingDialog = loadingDialogValue; 
}, true); 

ИЛИ (более элегантное решение)

$scope.getLoadingDialog = function() { 
    return loadingDialog; 
}; 
2

setTimeout() находится вне угловом-х переваривать цикл, так что значение вида не будет обновляться. Вместо этого используйте $timeout(). (https://docs.angularjs.org/api/ng/service/ $ таймаут)

+0

я попытался $ таймаут не помогло. – Arti

+0

значение изменяется на 100% - потому что console.log (loadDialog.progress) печатает ход – Arti

+0

Значение изменяется, но цикл дайджеста не запускается, что означает, что значение в вашем HTML не будет обновляться. Использование $ timeout должно исправить это, если нет другой проблемы. Можете ли вы добавить свое диалоговое окно к своему сообщению? – Fissio

Смежные вопросы