【问题标题】:DRYing up resolve parameter in $routeProvider干燥 $routeProvider 中的解析参数
【发布时间】:2015-05-18 20:07:16
【问题描述】:

干燥路径“/A”和“/B”的解析参数的“Angular”方式是什么?在我的 $routeProvider 中,我为这些场景调用完全相同的解析函数,但不知道避免在 AngularJS 框架中重复代码的最佳方法。

var app = angular.module("myProject", []);

app.config(["$routeProvider",function($routeProvider) {
    $routeProvider.
        when("/A", {
            templateUrl: "templates/A.html",
            controller: "AController",
            resolve: {
                tokenRefresh: function(serviceA, serviceB){
                    if (serviceA.refreshingToken() == true)
                    {
                        return(serviceB.refresh());
                    }   
                }
            }
        }).   
        when("/B", {
            templateUrl: "templates/B.html",
            controller: "BController",          
            resolve: {
                tokenRefresh: function(serviceA, serviceB){
                    if (serviceA.refreshingToken() == true)
                    {
                        return(serviceB.refresh());
                    }   
                }
            }
        }).
        otherwise({ 
            redirectTo: '/' 
        });
    }
]};

【问题讨论】:

    标签: javascript angularjs dry route-provider


    【解决方案1】:

    resolve 在您的情况下只是一个 JSON 对象。为什么不在您致电$routeProvider 之前声明一次?

    var resolver = {
        tokenRefresh: function(serviceA, serviceB){
            if (serviceA.refreshingToken() == true)
            {
                return(serviceB.refresh());
            }   
        }
    };
    
    $routeProvider.
    when("/A", {
        templateUrl: "templates/A.html",
        controller: "AController",
        resolve: resolver
    }).   
    when("/B", {
        templateUrl: "templates/B.html",
        controller: "BController",          
        resolve: resolver
    }).
    otherwise({ 
        redirectTo: '/' 
    });
    

    【讨论】:

    • 谢谢,贾斯汀。我也想过将它声明为一个独立的变量,但它看起来就像是它自己悬而未决,而不是 AngularJS 框架的一部分。我是否会与我的 Angular 应用程序并行声明“var resolver”(使用您的解决方案),定义为: var app = angular.module("myProject", []);
    • @Vee - 让它“自行悬空”并没有错。这就是 JS 变量的声明方式。无论哪种方式,它都比代码重用的复制/粘贴方法要好得多。
    • 绝对正确... 作为 AngularJS 的新手,我认为可能有一些我不知道的“Angular”方式。谢谢,贾斯汀!
    猜你喜欢
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多