2

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

.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'); 从一条路线更改为这条路线,角度不会重新解析此控制器。

我可能没有考虑以正确的方式解决问题,如果是这样,我会就“角度”的方式提出建议来做到这一点。我希望在视图之前加载所有这些信息,并且会根据路由参数而变化。

4

1 回答 1

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。非常微妙的变化使一切变得不同。

于 2013-08-23T21:28:24.170 回答