我在路由提供程序中设置了一个简单的解析功能。像
这样的东西.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不会重新解析此控制器。
我可能没有以正确的方式思考决心,如果是这样的话,会采取“棱角分明”的方式来做到这一点。我想在视图之前加载所有这些信息,并且根据路径参数变化。
答案 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
。非常微妙的变化使一切变得不同。