【问题标题】:Angular controller inheritance with view routing带有视图路由的 Angular 控制器继承
【发布时间】:2014-02-12 20:00:24
【问题描述】:

我有一个 Angular 应用程序,我目前正在使用 $routeProvider 将 URL 路由到带有 ng-view 指令的模板:

app.js

.config( function ($interpolateProvider, $routeProvider) {
$routeProvider
    .when('/project/:projectId', {
        // this is the partial...
        templateUrl : 'partials/_project_detail.html',
        controller: 'ProjectDetailCtrl',
        resolve: {
            project: function ($route, MyService) {
                return MyService.get('projects/', $route.current.params.projectId);
        }
    })
})

.controller('ProjectDetailCtrl', function ($scope, project) {
    ...
    $scope.project = project;
})

index.html

...
<div ng-view></div>
...

现在,我想使用控制器范围继承在父控制器中拥有一个子控制器,如下所示:

project_detail.tmpl.html

...
<h2>Project: {{ project.title }}</h2> <!-- this works -->

<div ng-controller="ChildCtrl">
   <h2>Project: {{ project.title }}</h2> <!-- this doesn't work -->
</div>
... 

但这似乎不起作用。我知道根据 Angular 文档,如果在模板中声明了两个控制器,您可以在父范围和子范围之间继承范围:http://docs.angularjs.org/guide/controller

有没有办法使用router方法实现继承?

【问题讨论】:

  • 试试 $rootScope.project = project;
  • 嗯。这种破坏了范围继承的对象。如果我绑定到$rootScope,那么子控制器就不需要嵌套,它可以在任何地方。我宁愿将范围对象保留在这两个控制器中。

标签: angularjs angularjs-scope


【解决方案1】:

也许这是因为您绑定的是原始值,而不是控制器中的对象。尝试使用带有点符号的对象,例如:{{ project.var1 }}

如果是这个问题,我建议你观看这个视频:Egghead.io

【讨论】:

  • 其实$scope.project 是一个对象,我应该在我的模板代码中更加明确。我现在已经编辑过了。 title 属性在 Parent 控制器中可用,但在 Child 中不可用。
  • 您是否在 .js 文件中创建了 ChildCtrl ?我已经重新创建了您的问题,就像您所做的那样进行注入,并且效果很好。也许您可以向我们展示 MyService 中的内容?
  • 是的,控制器肯定是实例化的,Child应该从范围而不是服务继承项目对象。在模板中的控制器指令之前,项目对象也是正确的。
  • 我已经启动了一个 plunker,这可能有助于了解发生了什么:plnkr.co/edit/rUdPBzbHX0bGOwtjQEIt?p=preview
  • 你的 plunker 坏了,我已经创建了另一个正在工作的:plnkr.co/edit/LclNy5UUWINcJ33svDPi?p=preview
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
  • 2014-06-14
  • 2015-09-27
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
相关资源
最近更新 更多