具有多条路线的角度分辨率

时间:2017-02-08 16:09:50

标签: angularjs angular-routing angular-services

我正在开发应用程序,它是家庭应用程序的一部分。每个应用程序使用相同的令牌但使用不同的设置,我写了一段代码,允许在加载控制器和页面模板之前进行检查配置,但问题是我有大约50条路线,我不想复制它每条路线。所以我想知道角度是否有一些拦截器允许在加载路径之前解析我的检查功能而不复制这段代码

P.S。当然,简单的方法是为此写工厂并为每条路线添加“解决返回工厂”的简单线路,但我很好奇是否有其他方式?

接下来是我的解析功能

  page: 'Home Page',
        templateUrl: Config.baseURL + '/views/welcome.html',
        controller: 'welcome',
        resolve: {
            getConfig: function (lovServices) {
                var config = App.storage('App_config');
                if (config == null){
                    return lovServices.appConfig()
                        .then(function (response) {
                            App.storage('App_config', response);
                        })
                } else {
                    return false
                }
            },
            getPermissions: function (lovServices) {
                var permissions = App.storage('App_access');
                if (permissions == null){
                    return  lovServices.permissions()
                        .then(function (response) {
                            function checkAvailability(arr, val) {
                                return arr.some(function(arrVal) {
                                    return val === arrVal.allowed;
                                });
                            }
                            if (checkAvailability(response, true)){
                                var permissions = JSON.stringify(response);
                                App.storage('App_access', permissions);
                            } else {
                                localStorage.removeItem('App_token');
                                localStorage.removeItem('App_config');
                                localStorage.removeItem('App_access');
                                return false
                            }
                        });
                }
            }
        }
    })

1 个答案:

答案 0 :(得分:0)

所以基于this answer路由定义之前我的路由提供者内部已经放了这个代码:

   function ($routeProvider, $locationProvider) {

    var originalWhen = $routeProvider.when;

    $routeProvider.when = function(path, route) {

        route.resolve || (route.resolve = {});
        angular.extend(route.resolve, {
            getConfig: function (lovServices) {
                var config = App.storage('App_config');
                if (config == null && path !== '/login'){
                    return lovServices.AppConfig()
                        .then(function (response) {
                            App.storage('App_config', response);
                        })
                } else {
                    return false
                }
            },
            getPermissions: function (lovServices) {
                var permissions = App.storage('App_access');
                if (permissions == null && path !== '/login'){
                    return  lovServices.permissions()
                        .then(function (response) {
                            function checkAvailability(arr, val) {
                                return arr.some(function(arrVal) {
                                    return val === arrVal.allowed;
                                });
                            }
                            if (checkAvailability(response, true)){
                                var permissions = JSON.stringify(response);
                                App.storage('App_access', permissions);
                            } else {
                                localStorage.removeItem('App_token');
                                localStorage.removeItem('App_config');
                                localStorage.removeItem('App_access');
                                return false
                            }
                        });
                }
            }
        });

        return originalWhen.call($routeProvider, path, route);
    };

    $routeProvider.when('/', { ....

此代码按预期工作。