2015-01-08 47 views
0

我想结合2个概念,我无法让他们一起工作。路线解析+多控制器组合?

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

的特定代码问题是,我需要这两个概念结合起来,但是很难做到这一点,因为我无法通过局部变量中的“子”控制器,只有主控制器。

我看到真的不样子好想法的唯一选项...

  1. 在基地控制器,添加本地变量为$scope变量(看起来很脏,特别是大型控制器)
  2. 将它变成一个服务(它不是任何虽然真正的服务相关的...)

回答

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 
}); 
+0

哦,快照...我不知道你能做到这一点。让我试试看! – Tallboy

+0

令人惊叹 – Tallboy