修改angularjs中的页面后再次重新承诺

时间:2015-06-16 08:14:59

标签: javascript angularjs

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(),但仍然没有运气。

据我所知,一旦承诺得到解决,它就不会再次加载。但如果我离开那个页面并再次访问,我想再次重新加载诺言。

1 个答案:

答案 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;
        }
    }
})