2014-02-12 45 views
0

您好我有一個角應用程序,我目前使用$routeProvider路由的網址爲模板與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> 
... 

現在,我想我們E控制器範圍繼承有一個孩子控制器父之一內,沿着線:

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

是否有某種方法可以實現使用路由器方法的繼承?

+0

嘗試$ rootScope.project =項目; – Whisher

+0

嗯。這種類型打敗了範圍繼承的對象。如果我綁定到'$ rootScope',那麼子控制器不需要嵌套,它可以在任何地方。我寧願將範圍對象保留在這兩個控制器中。 –

回答

0

也許這是因爲你綁定了原始值,而不是控制器中的對象。嘗試使用對象與點符號,例如:{{project.var1}}

如果是這樣的問題,我建議你看這個視頻:Egghead.io

+1

實際上'$ scope.project'是一個對象,我應該在我的模板代碼中更加明確。我現在編輯它。標題屬性在父級控制器中可用,但不在子級中。 –

+0

您是否在.js文件中創建了ChildCtrl?我已經重新創建了問題,並像注射一樣進行了注入,並且工作正常。也許你可以向我們展示MyService中的內容? –

+0

是的,控制器是明確實例化的,並且子應該從範圍而不是服務繼承項目對象。此外,項目對象在模板中的控制器指令之前是正確的。 –