2016-01-30 3 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.$parent в SearchCtrl.js ища $scope от MainCtrl, но я получаю undefined.

Я попытался изменить контроллер в своей конфигурации, но тогда я не смог получить доступ к SearchCtrl. Что мне делать?

+0

В шаблоне маршрута не должно быть ''. Также у вас будет 2 экземпляра '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

Main.html уже в области SearchCtrl, и вам не нужно определять снова в представлении.

Тогда определение MainCtrl внутри main.html, находящегося под областью «SearchCtrl», не будет принимать MainCtrl в качестве родителя.

Следовательно удалить оба контроллера из main.html

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

Сейчас в index.html, поставить MainCtrl в качестве родителя нг вида

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

Теперь попытайтесь получить доступ к $ Scope. $ Родителя в ваш SearchCtrl, тогда вы могли бы это увидеть.

+0

Но что, если я хочу 'MainCtrl' только для этого конкретного вида? Благодаря! –

Смежные вопросы