【发布时间】:2014-09-12 16:58:23
【问题描述】:
我有一个非常标准的应用程序,它将显示来自远程 JSON 提要的新闻项目。所以基本上我决定轮询远程服务器并将 JSON 存储在 localStorage 中(以启用离线使用)。目前,我有一个手册页/视图,我必须单击以更新 localStorage ,这工作正常。
问题是,在我使用我的临时手动更新页面后,我转到新闻页面/视图并且它没有更新。要查看当前的 JSON 内容,我必须点击刷新(同时仍在浏览器中开发。)
我对 Angular 完全陌生,并试图自己找到解决方案 - $watch 或 reload: true 似乎被建议作为修复,但我无法让它们在我的情况下工作。
路线
.state('tab.news', {
url: '/news',
reload: true,
views: {
'news-tab': {
templateUrl: 'templates/news_home.html',
controller: 'newsCtrl'
}
}
})
工厂
angular.module('schoolApp.services', [])
.factory('newsService', function($q) {
var newsHeadlines =localStorage.getItem('newsHeadlines') || '{"status":"READFAIL"}'; // get news as a JSON string. if newsHeadlines not found return a JSON string with fail status
var newsHeadlinesObj = JSON.parse(newsHeadlines);// convert to an object
console.log("factory newsService ran");
return {
findAll: function() {
var deferred = $q.defer();
deferred.resolve(newsHeadlinesObj);
return deferred.promise; // or reject(reason) to throw an error in the controller https://docs.angularjs.org/api/ng/service/$q
},
findById: function(newsId) {
var deferred = $q.defer();
var newsItem = newsHeadlinesObj[newsId];
deferred.resolve(newsItem);
return deferred.promise;
}
}
});
控制器
schoolApp.controller('newsCtrl', function($scope, newsService) {
console.log ( 'newsCtrl ran' );
newsService.findAll().then(function (newsHeadlinesObj) {
$scope.newsHeadlinesObj = newsHeadlinesObj;
}, function(error){
console.log(error)
});
})
看着我的控制台,我第一次阅读新闻时,工厂然后控制器运行,但如果我去拉更多数据,然后去破解新闻,只有控制器运行,除非我刷新,然后都运行再次。
我不需要新闻视图来更新“实时”,而仍然在它上面(但如果这可以轻松完成就更好了) - 只是为了在您在应用程序的其他地方返回新闻时获取新数据.
谢谢。
【问题讨论】: