我已经配置了多个路由的resolve
参数来返回一个promise,以便延迟控制器的实例化,直到解析了promise。目前我正在使用函数表示法,而不是指定要注入的字符串。
例如:
.when('/article/:id', {
templateUrl: 'app/article/article.html',
controller: 'ArticleController',
resolve: {
article: ['Content', '$route', function (Content, $route) {
return Content.get({ contentId: $route.current.params.id }).$promise;
}]
}
})
使用已解析的promise值正确注入article
参数。
但是,我想保持DRY并通过指定字符串来注入此值,mentioned in the documentation也是如此。
当我设置工厂函数来提供这样的承诺时,实例只能正确注入一次(第一次)。此后,使用相同的promise,因为AngularJS注入服务已缓存该实例。
.factory('contentPromise', ['Content', '$route', function (Content, $route) {
return Content.get({ contentId: $route.current.params.id }).$promise;
}])
是否可以指定每次请求时都必须运行工厂功能?或者以其他方式实现我的目标?
答案 0 :(得分:7)
你拥有的第一个例子是要走的路,我想你可以去一点点" DRYer"像这样:
.when('/article/:id', {
...
resolve: {
article: ['contentPromise', function (contentPromise) {
return contentPromise();
}]
}
})
服务:
.factory('contentPromise', ['Content', '$route', function (Content, $route) {
return function() {
return Content.get({ contentId: $route.current.params.id }).$promise;
};
}])