路由解析+多控制器组合?

时间:2015-01-08 20:55:15

标签: javascript angularjs angularjs-scope angularjs-routing

我试图合并两个概念,而我却无法让它们协同工作。

Concept 1:路线解析。这很容易解释,我只想解决这样的某些模型:

$routeProvider
  .when("/news", {
    templateUrl: "news.html",
    controller: "newsCtrl",
    resolve: { news: function(Model) { return Model.news.getList(); }

Concept 1:基本控制器的概念'我可以在路由controller: xyz中使用,然后在实际视图html中加载' sub'控制器。例如......

app.js

$routeProvider
  .when("/news/latest", {
    templateUrl: "news-latest.html",
    controller: "newsCtrl"

新闻-latest.html

<div ng-controller="newsLatestCtrl">
...
</div>

这样我就可以将公共代码放在newsCtrl中的/news/latestnewsLatestCtrl特定代码中了$scope

问题是我需要将这两个概念结合起来,但这很难做到,因为我无法将局部变量传递给&#39; sub&#39;控制器,只有主控制器。

我看到的唯一选择看起来并不像是好主意......

  1. 在基本控制器中,将局部变量添加为{{1}}变量(看起来很脏,特别是对于大型控制器)
  2. 将其移至服务中(虽然它与任何服务并不相关......)
  3. ...

1 个答案:

答案 0 :(得分:2)

当我们不知道“基地管制员”的职责是什么时,很难帮助你。对我来说,您正在寻找的概念3如下:

$routeProvider
.when("/news", {
templateUrl: "news.html",
controller: "newsCtrl",
resolve: { news: function(Model) { return Model.news.getList(); })
.when("/news/latest", {
templateUrl: "news.html",
controller: "newsLatestCtrl"},
resolve: { newsLatest: function(Model) { return Model.news.getLatest(); });

module.controller('newsCtrl', function($scope, news) { 
    /* common code you want to share */ 
});

module.controller('newsLatestCtrl', function($scope, newsLatest, $controller) {
   // instantiate your "base controller"
   var ctrl = $controller('newsCtrl', {
       "$scope": $scope,
       "news": newsLatest
   });
   // customize and add special code for latest news
});