我一直試圖顯示一些消息後端返回的Angular ajax調用響應。 我有一個服務用於共享不同控制器的數據(ShareDataService)。
'use strict';
var angularPOC = angular.module('angularPOC');
angularPOC.factory('ShareDataService', [ '$timeout', function($timeout) {
var messages = [];
var service = {
setMessage : function(messageText, messageType) {
$timeout(function() {
messages = [];
messages.push({
'text' : messageText,
'type' : messageType});
});
};
return service;
}]);
然後,我有一個控制器,它依賴於數據服務設置,並應該根據數據變化更新視圖:
'use strict';
var MessageControllers = angular.module('MessageControllers', []);
var angularPOC = angular.module('angularPOC');
angularPOC.controller('MessageController', ['$scope', '$routeParams', '$timeout', 'ShareDataService', function($scope, $routeParams, $timeout, ShareDataService) {
$scope.shareService = ShareDataService;
$scope.messages = ShareDataService.messages;
$scope.$watch('ShareDataService.messages',
function(newVal) {
alert("newval: " + JSON.stringify(newVal));
alert("sharedata: " + JSON.stringify(scope.shareService.messages));
$scope.messages = newVal;
// or
// $scope.getMessages();
}
);
$scope.getMessages = function() {
$scope.messages = ShareDataService.getMessages();
return $scope.messages;
};
}]);
的$手錶將趕上「一些」事件中潛在的數據變化,但'警報'將顯示'newVal'是'未定義'。 「sharedata」將在更改之前按原樣打印消息。 此外,當試圖使用該方法顯式獲取數據時,它會對舊數據感到厭煩。
但是,如果我在頁面上放置一個按鈕來顯式調用範圍中的getMessages(),它將獲得正確的數據!
看起來「服務」似乎比它應該在$ watch中落後了一步。
我讀過幾個關於如何使用$ watch的例子/教程,這對我來說似乎是正確的,但是它不能像預期的那樣工作?
請指教。謝謝。
哇。當你試圖讓某些東西長時間工作並最終成功時,你給了我那種溫暖的模糊感。 :D它工作完美。 –