Angular routeProvider Resolve未调用

时间:2013-08-20 17:38:37

标签: angularjs route-provider

我在路由提供程序中设置了一个简单的解析功能。像

这样的东西
.config(['$routeProvider', 'Constants', function config($routeProvider, Constants) {
    $routeProvider.
        when('mypage', {
            templateUrl: 'partials/mypage.tpl.html',
            controller: 'MyPageCtrl',
            reloadOnSearch: false,
            resolve: {
                factory: 'MyPageResolve'
            }
        })
)];

在这样的模块中声明该工厂:

.factory('MyPageResolve', ['$q', '$log', 'someAPI',
    function ($q, $log, someAPI) {
        var defer = $q.defer();
        var postUserFunc = function () {

            someAPI.get(
                function(data, status) { //$http.get().success() func
                    defer.resolve();
                }
            );

        };
        return defer.promise;
}]);

正在进行的是直接刷新或第一次加载时,此解析方法被点击。但是,如果我有$ location.url('/ mypage');从一个路径更改为此路径,angular不会重新解析此控制器。

我可能没有以正确的方式思考决心,如果是这样的话,会采取“棱角分明”的方式来做到这一点。我想在视图之前加载所有这些信息,并且根据路径参数变化。

1 个答案:

答案 0 :(得分:3)

结束我需要将该工厂变成一个功能。工厂充当单件,因此它只运行一次。

所以我让我的工厂看起来像:

var myPageResolve = ['$q', '$log', 'someAPI',
function ($q, $log, someAPI) {
    var defer = $q.defer();
    var postUserFunc = function () {

        someAPI.get(
            function(data, status) { //$http.get().success() func
                defer.resolve();
            }
        );

    };
    return defer.promise;
}]);

而不是解析'myPageResolve',我决定myPageResolve。非常微妙的变化使一切变得不同。