我正在尝试将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"


news-latest.html

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


这将使我可以将通用代码放入newsCtrl中,并将/news/latest特定代码放入newsLatestCtrl

问题是我需要将这两个概念结合起来,但是很难做到这一点,因为我不能将局部变量传递给“ sub”控制器,而不能传递给主控制器。

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


在基本控制器中,将本地变量添加为$scope变量(似乎很脏,尤其是对于大型控制器)
将其移至服务中(尽管它与任何服务都没有真正关系...)
??

最佳答案

当我们不知道“基本控制器”的职责是什么时,很难为您提供帮助。对我来说,您正在寻找的Concept 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
});

10-08 15:49