Я хочу внести некоторые изменения в свой контроллер данных, которые я получаю с сервера. Я привел пример, чтобы объяснить мою проблему. Рекурсивный метод «update», похоже, не обновляет значение $scope.gdevPiechartArchiveVolume
. Может ли кто-нибудь сказать мне, почему? Есть ли способ инициировать обновление? Спасибо!Как обновить угловую область
angular.module('socketTestApp')
.controller('MainCtrl', function($scope, Socket) {
Socket.on('gdevAreachart_archiveVolume_update', function(data_) {
selectArchiveData(data_);
});
function selectArchiveData(data) {
var i = 0;
var selectedData;
$scope.update = function() {
_.delay($scope.update, 2000);
if ($scope.pause)
return
i++
$scope.gdevPiechartArchiveVolume = i; //<--- this seems not to work but only if i set $scope.pause true
console.log('Updates in $scope.update: ' + $scope.gdevPiechartArchiveVolume);
}
$scope.update();
}
Мой direcitve (наблюдаемые переменные данные "$scope.gdevPiechartArchiveVolume
"):
angular.module('socketTestApp')
.directive('gdevAreachart', function() {
var linker = function(scope, element, attr) {
scope.$watch('data', function(newVals, oldVals) {
console.log("Direktive: " + newVals);
return //make some other thinks
}, true);
выход консоли (далее" Direktive:
..." должен быть напечатан каждый раз, как "Обновление в $ scope.update:
") :
Direktive: undefined gdevAreachart.js:14
Updates in $scope.update: 1 main.js:127
Direktive: 1 gdevAreachart.js:14 <---- set scope.pause = true ... false to continue
Updates in $scope.update: 2 main.js:127
Updates in $scope.update: 3 main.js:127
Updates in $scope.update: 4 main.js:127
Updates in $scope.update: 5 main.js:127
Updates in $scope.update: 6 main.js:127
Direktive: 6 gdevAreachart.js:14 <---- set scope.pause = true ... false to continue
Updates in $scope.update: 7 main.js:127
Updates in $scope.update: 8 main.js:127
Direktive: 8 gdevAreachart.js:14 <---- set scope.pause = true ... false to continue
Updates in $scope.update: 9 main.js:127
Updates in $scope.update: 10 main.js:127
Direktive: 10 gdevAreachart.js:14 <---- set scope.pause = true ... false to continue
Updates in $scope.update: 11 main.js:127
Updates in $scope.update: 12
Решение:
function selectArchiveData(data) {
var i = 0;
var selectedData;
$scope.update = function() {
if ($scope.pause)
return
i++
$scope.gdevPiechartArchiveVolume = i;
console.log('Updates in $scope.update: ' + $scope.gdevPiechartArchiveVolume);
setTimeout(function() {
$scope.$apply($scope.update());
}, 2000);
}
$scope.update();
}
Когда $ scope.pause = true 'if ($ scope .pause) return' будет 'return' и' $ scope.gdevPiechartArchiveVolume = i; 'не будет выполняться. – klode