在angularjs $ routeProvider中动态加载控制器

Kia*_*Rad 21 javascript angularjs angularjs-routing

我目前有一个内置路由的AngularJS应用程序,它与静态controller属性赋值完美配合.但我真正想做的是动态分配不同路径的控制器:

$routeProvider
 .when("/Dashboards/:dashboardName",{
    templateUrl:function(params) {
                 return "Dashboards/" + params.dashboardName;
                //some ASP.NET MVC calls to return partial views (this part works)
        }
  })
Run Code Online (Sandbox Code Playgroud)

我想做的是在controller这里对我的财产做同样的事情,比如:

$routeProvider
 .when("/Dashboards/:dashboardName",{
       templateUrl:function(params) {
             return "Dashboards/" + params.dashboardName;
            //some ASP.NET MVC calls to return partial views (this part works)
           },
       controller: function(params) {
             return params.dashboardName+"Controller"; (this part DOESN'T work)
           }
  })
Run Code Online (Sandbox Code Playgroud)

但似乎我得到一个错误说paramsProvider找不到

那么有什么方法可以在路由配置中动态加载我的控制器功能名称?

Bra*_*ger 11

这可以使用角度ui路由器.

ui-router允许您指定"controllerProvider"以指定用于提供控制器的功能.所以解决方案看起来像这样:

$stateProvider
.state("/Dashboards/:dashboardName",{
   templateUrl:function($stateParams) {
         return "Dashboards/" + $stateParams.dashboardName;
       },
   controllerProvider: function($stateParams) {
         return $stateParams.dashboardName+"Controller";
       }
  })
Run Code Online (Sandbox Code Playgroud)

我希望它有所帮助!


Nat*_*son 7

我没有在$ routeProvider中指定控制器,而是将其放在templateURL中指定的文件中,从而解决了这个问题.

$routeProvider
 .when("/Dashboards/:dashboardName",{
    templateUrl:function(params) {
                 return "Dashboards/" + params.dashboardName;
        }
  })
Run Code Online (Sandbox Code Playgroud)

DashboardsNAME.html

<div class="container" ng-Controller='DashboardsNAMEController'>Food</div>
Run Code Online (Sandbox Code Playgroud)

此技术仍需要在路由实例化之前的某个时刻进行注册DashboardsNAMEController.我怀疑最好的地方是在module.run()调用你自己的服务的方法,但我在我的主控制器中这样做,因为它工作,无论如何是一个短控制器.