1)我有登录页面,登录成功后进入主页。
if (data.status == CONSTANTS.RETURN_SUCCESS) {
$location.path("/home");
$route.reload();
}
2)我想在转到主页控制器之前从数据库重新加载一些数据 - 所以书面承诺。对应的app.js代码:
.when('/home',
{
templateUrl: '/views/home.html',
resolve: {
'myAssetsData': function (myAssetsDataPromise) {
return myAssetsDataPromise.promise;
}
}
})
我的承诺调用一个函数“setAssetData()”来获取&设置一些服务级别变量。
.service('myAssetsDataPromise', ['myassets_service', '$log', function (myassets_service, $log) {
$log.debug("Initialize myAssetsDataPromise");
var return_data = {}
//fetch and set some service level variables
var promise = myassets_service.setAssetData()
return {
promise: promise,
getAssets: function () {
return return_data.status = "success";
}
};
}
3)主页有注销链接 - 它只是清除服务器端的会话并重定向到登录页面
$location.path("/");
4)第一次一切都很完美。登录后,首先加载我的资产数据,然后初始化我的主页控制器。
问题是第二次加载:我的预期是,如果我退出并重新登录(或者说要转到任何其他页面并返回主页)那么我的承诺应该被执行并且资产数据应该被加载再次。但除非我重新加载页面或清除历史记录/缓存;我的承诺没有得到执行。我尝试了$ route.reload(),但仍然没有运气。
据我所知,一旦承诺得到解决,它就不会再次加载。但如果我离开那个页面并再次访问,我想再次重新加载诺言。
答案 0 :(得分:0)
看起来一切都应该有效。 我认为问题是因为你要将结果分配给var
var promise = myassets_service.setAssetData()
尝试更新您的代码。
.service('myAssetsDataPromise', function (myassets_service, $log) {
return {
promise: myassets_service.setAssetData()
};
})
.service('myassets_service', function () {
return {
setAssetData : function ($q) {
var data = {'your_data':'what_ever'};
console.log('setAssetData called', data);
var deferred = $q.defer();
deferred.resolve(data);
return deferred.promise;
}
}
})