我有一个控制器,它在加载路径之前有一个解析器。我的解析器设置了两个常量:viewA和viewB。并且通过在同一服务上调用两个不同的端点来设置这两个常量。该服务调用相同的数据库来根据我传递的id来撤消数据。
角度模块
angular.module("ModuleA", ["ngRoute"])
.config(["$routeProvider", "moduleResolver",
function ($routeProvider, moduleResolver) {
$routeProvider
.when('/route1', {
templateUrl: 'route1.html',
controller: "route1Ctrl",
resolve: moduleResolver
})
.when('/route2', {
templateUrl: 'route2.html',
controller: "route2Ctrl",
resolve: moduleResolver
})
}])
解析器
angular.module("ModuleA")
.constant("moduleResolver", {
"viewA": ["moduleService", function(moduleService) {
return moduleService.getResource("resourceA")
.then(moduleService.mapResourceToViewA);
}],
"viewB": ["moduleService", function(moduleService) {
return moduleService.getResource("resourceB")
.then(moduleService.mapResourceToViewB);
}]
});
服务
angular.module("ModuleA")
.service('moduleService', ['$q', '$resource',
function ($q, $resource) {
this.getResource= function (resourceToCall) {
var defer = $q.defer();
$resource("url based on resourceToCall passed in", {}, {})
.get({}, function (result) {
defer.resolve(result);
},
function (result) {
defer.reject(result);
});
return defer.promise;
}
this.mapResourceToViewA = function() {
//map result from resource call to view model for View A
}
this.mapResourceToViewB = function() {
//map result from resource call to view model for View B
}
}]);
当我尝试在解析器中执行这些调用时出现错误。我是否需要调用$ digest()来解决第一次调用,因为它会触发下一次调用。我应该在解析器中链接资源调用吗?我不喜欢这样做,因为它们在技术上是两个独立的模型,我想保持分离,而且我不想更改映射方法以返回承诺。