主应用程序和子应用程序的两个控制器具有相同的URL与角度ui路由?

时间:2014-06-16 20:50:31

标签: javascript angularjs routes

我为main-app和sub-app定义了两个控制器'BaseController'和'SubController'。两个控制器的配置指向空URL。

以下是主应用程序的配置: -

angular.module("main-app").config(["$stateProvider", "$urlRouterProvider", function ($stateProvider, $urlRouterProvider) {
  $stateProvider
  .state('base', {
      url: "",
      views: {
        "base": {
          controller: 'BaseController' 
        }
      }
    });
}]);

这是子应用程序的配置: -

 angular.module("sub-app").config(["$stateProvider", "$urlRouterProvider", function ($stateProvider, $urlRouterProvider) {
  //$locationProvider.html5Mode(true); 
  $stateProvider
  .state('sub', {
      url: "",
      views: {
        "patients": {
          templateUrl:"templates/scope/patients/patients_search.html",
          controller: 'PatientsController' 
        }
      },
    });
}]);

主应用程序包括子应用程序。

如何允许使用相同的空URL加载两个控制器?

1 个答案:

答案 0 :(得分:0)

首先,对于相同根视图的两个控制器没有任何意义。这是因为控制器需要视图上下文来操作,即$scope层次结构中的位置。

我认为您需要的是将控制器抽象为可注入任何控制器的服务。例如,创建mainsrvsubsrv服务,然后在url: ''上使用单个根控制器。然后您的根控制器定义可能如下所示:

angular.module('myapp', [])
    .controller('AppCtrl', ['mainsrv', 'subsrv', function(mainsrv, subsrv){
        // use mainsrv and subsrv services here
    }]);

如果您确实希望在根视图上加载多个控制器,请按上述方法创建单个根视图,但在视图中使用ng-controller来指定每个控制器的上下文。例如:

<div ng-controller="BaseController"></div>
<div ng-controller="PatientsController"></div>