2016-01-30 114 views
0

main.html有這樣的:使用嵌套控制器在ngRoute - AngularJS

<div ng-controller="MainCtrl"> 
<form ng-controller="SearchCtrl"> 
    <input ng-model="query" ng-change="changed(query)" /> 
</form> 
</div> 

而且,index.html

<html> 
<head> 
    <title>Dashboard</title> 
</head> 
<body ng-app="MyApp"> 
<nav ng-controller="NavCtrl"> 
... 
</nav> 
<div ng-view></div> 
</body> 
</html> 

而且,我的ngRoute配置如下:

module.config(function($routeProvider)){ 
$routeProvider.when('/', { 
    templateUrl: 'views/main.html', 
    controller: 'SearchCtrl' 
}); 
} 

我試圖訪問$scope.$parentSearchCtrl.js尋找$scopeMainCtrl但我得到undefined

我試着改變我的配置中的控制器,但然後,我無法訪問SearchCtrl。我該怎麼辦?

+0

在路線模板中不應該有''。另外你會有兩個'SearchCtrl'實例顯示代碼...一個嵌套在另一個 – charlietfl

+0

@charlietfl是的。那麼我該如何確保兩個控制器嵌套?謝謝。 –

+0

顯示您的index.html的主體,以查看您的'ng-view' – charlietfl

回答

1

基於結構顯示ng-view內的所有內容都將在路由器配置的控制器中設置.... SearchCtrl

內。然後將MainCtrl和裏面的SearchCtrl

,以便其他(新實例)或許應該改變路由控制器來MainCtrl和刪除ng-controller="MainCtrl"

module.config(function($routeProvider)){ 
$routeProvider.when('/', { 
    templateUrl: 'views/main.html', 
    controller: 'MainCtrl' 
}); 
} 

main.html中

<div> 
<form ng-controller="SearchCtrl"> 
    <input ng-model="query" ng-change="changed(query)" /> 
</form> 
</div> 
1

已經在SearchCtrl範圍內的main.html,您不需要定義範圍再次在視圖中。

然後,定義MainCtrl中的mainCtrl,它位於「SearchCtrl」範圍下,不會將MainCtrl作爲其父類。

因此,從main.html中

<form> 
<input ng-model="query" ng-change="changed(query)" /> 
</form> 

index.html中刪除這兩個控制器現在,把MainCtrl作爲父母NG-視圖

....... 
<div ng-controller="MainCtrl"> 
<div ng-view></div> 
</div> 
....... 

現在嘗試在訪問$範圍。$父你的SearchCtrl,然後你可以看到它。

+0

但是如果我只想爲這個特定的視圖使用MainCtrl?謝謝! –