两个资源调用角度路由解析器中的相同服务

时间:2015-01-14 03:31:00

标签: java angularjs multithreading

我有一个控制器,它在加载路径之前有一个解析器。我的解析器设置了两个常量: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()来解决第一次调用,因为它会触发下一次调用。我应该在解析器中链接资源调用吗?我不喜欢这样做,因为它们在技术上是两个独立的模型,我想保持分离,而且我不想更改映射方法以返回承诺。

0 个答案:

没有答案