在ngRoute中使用嵌套控制器 - AngularJS

时间:2016-01-30 15:42:14

标签: javascript angularjs ngroute

我在main.html

中有这个
<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的{​​{1}}但我得到了MainCtrl

我尝试在配置中更改控制器,但之后,我无法访问undefined。我该怎么办?

2 个答案:

答案 0 :(得分: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 :(得分:1)

main.html已经在SearchCtrl范围内,您无需在视图中再次定义范围。

然后,在“SearchCtrl”范围下的main.html中定义MainCtrl将不会将MainCtrl作为其父级。

因此从main.html中删除两个控制器

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

现在在index.html中,将MainCtrl作为父视图放到ng-view

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

现在尝试在SearchCtrl中访问$ scope。$ parent,然后你可以看到它。