我正在尝试根据路由(在 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'); });
我知道控制器需要在应用程序开始时出现,但我无法用语句编写适当resolve
的promise
语句。
有人可以通过一个简单的承诺来帮助我解决问题,该承诺会根据路由返回控制器名称的字符串吗?