Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从angularjs中的路由构造控制器名称_Javascript_Angularjs_Ngroute_Angularjs Ng Route - Fatal编程技术网

Javascript 如何从angularjs中的路由构造控制器名称

Javascript 如何从angularjs中的路由构造控制器名称,javascript,angularjs,ngroute,angularjs-ng-route,Javascript,Angularjs,Ngroute,Angularjs Ng Route,我试图定义一个通用路由,它将处理大部分请求。为每一个特性添加一条路径是我感觉不好和不可维护的 因此,我的目标是编写一个通用路由,并动态解析数据中心,其中包括解析所有依赖的控制器和服务文件、解析templateUrl和解析控制器名称我可以解析/构造除控制器名称以外的所有内容。请帮我绕道 使用自定义解析程序的我的路由: $routeProvider .when('/:module/:controller/:action?', routeResolver.resolve()) 在我的自定义解析器中

我试图定义一个通用路由,它将处理大部分请求。为每一个特性添加一条路径是我感觉不好和不可维护的

因此,我的目标是编写一个通用路由,并动态解析数据中心,其中包括解析所有依赖的控制器和服务文件、解析templateUrl和解析控制器名称我可以解析/构造除控制器名称以外的所有内容。请帮我绕道

使用自定义解析程序的我的路由:

$routeProvider
 .when('/:module/:controller/:action?', routeResolver.resolve())
在我的自定义解析器中:

function routeResolverProvider(){

this.$get= function(){
  return this;
}

this.resolve = function (options) {
 var route = {};

 route.templateUrl = function (params) {
     var path = String.format('/app/components/{0}/{1}.view.html', params.module, params.controller);
     return path;
 };

 //================================================================================
 route.controller='THIS IS WHAT I WANT TO CONSTRUCT FROM ROUTE as templateUrl'  
 //================================================================================

 route.resolve = {
   loadDependencies: ['$q', '$rootScope', '$route', function ($q, $rootScope, $route) {
      // MY RESOLVE LOGIC HERE
      // I construct dependent file path from route values
      // String.format('/app/components/{0}/{1}.controller.js', params.module, params.controller);
   }]
 };

 return route;
 }}

app.provider('routeResolver', routeResolverProvider)
一些好文章:

如果我正确理解了您的问题,那么您希望能够按名称实例化控制器

这在AngularJS中是可能的,如下所述

您必须像这样使用服务:

$scope = $rootScope.$new();
$controller('NamedController', {$scope: $scope});

这是一个有用的工具:

非常感谢Dan,我也在寻找这种工具。所以我修改了我的解析器,最后是宾果

this.$get = ['$rootScope', '$scope', '$route', '$controller', function () {
    return this;
}];

route.controller = function ($rootScope, $scope, $route, $controller) {
    var params = $route.current.params;
    $controller(params.controller.toLowerCase() + 'Controller', {$scope: $scope});
}

最后,我解决了我的问题,但想讨论一下这种方法可能存在的缺点。

我正在尝试定义一种通用路由,它将处理大多数请求
难道你不能直接使用
否则