2

我正在尝试根据路由(在 Angular 1.6 中)动态加载模板和控制器,从当前目录架构中提取。

    应用程序
    |__login.module.js
    |__home.controller.js
    |__login.factory.js
    |__home.view.html
    |__404.view.html
    |__index.html

目前,以下代码可用于提取正确的模板,但控制器不会加载:

    angular.module('common.auto-loading-routes', []).config(function($routeProvider){

    函数getTemplate(路由参数){
        var route = (routeParams.current) ?routeParams.current.params.route : routeParams.route;
        var directory = route.split('/');
        目录 = directory.filter(function(entry) { return entry.trim() != ''; });
        var page = 目录[directory.length - 1];
        目录.splice(-1,1);
        目录 = directory.join('/');
        返回目录+'/'+页面+'.view.html';
    }

    函数获取控制器(路由参数){
        //我觉得这里需要promise,但是不知道怎么写
        routeParams = routeParams.route.split('/').join('.');
        返回 routeParams + '控制器';
    }

    $routeProvider.when('/:route*', {
        控制器:函数($routeParams){ //不起作用
            返回 getController($routeParams);
        },
        templateUrl: function($routeParams) { //有效
            返回 getTemplate($routeParams);
        },
        解决: {
            检查:函数($route,$http,$location){
                return $http.get(getTemplate($route)).then(function(response){
                    如果(响应状态!== 404){
                        返回真;
                    } 别的 {
                        $location.path('404');
                    }
                });
            }
        }
    }).otherwise('/404');
});

我知道控制器需要在应用程序开始时出现,但我无法用语句编写适当resolvepromise语句。

有人可以通过一个简单的承诺来帮助我解决问题,该承诺会根据路由返回控制器名称的字符串吗?

4

1 回答 1

0

通过根本不将控制器包含在路由中,我能够使其工作。相反,我将 ng-controller 属性放在正在加载的视图中。

这行得通!

angular.module('common.auto-loading-routes', []).config(function($routeProvider){

    函数getTemplate(路由参数){
        var route = (routeParams.current) ?routeParams.current.params.route : routeParams.route;
        var directory = route.split('/');
        目录 = directory.filter(function(entry) { return entry.trim() != ''; });
        var page = 目录[directory.length - 1];
        目录.splice(-1,1);
        目录 = directory.join('/');
        返回目录+'/'+页面+'.view.html';
    }

    $routeProvider.when('/:route*', {
        templateUrl: function($routeParams) { //有效
            返回 getTemplate($routeParams);
        },
        解决: {
            检查:函数($route,$http,$location){
                return $http.get(getTemplate($route)).then(function(response){
                    如果(响应状态!== 404){
                        返回真;
                    } 别的 {
                        $location.path('404');
                    }
                });
            }
        }
    }).otherwise('/404');
});

在那个视图的 HTML 中,我只是把

ng-controller="home.controller"
(或任何合适的控制器)

于 2018-02-09T22:59:13.763 回答