我有一个catalog.html angular应用程序,其中2 ui视图和它们在同一控制器categoryCtrl:
下catalog.html
<!-- SEARCH -->
<div ui-view="search-catalog"></div>
<!-- CONTENT -->
<div ui-view="result"></div>
app.js
.state('catalog', {
url: '/catalog',
views: {
'search-catalog': {
templateUrl: 'views/search-catalog.html',
controller: 'categoryCtrl'
},
'result': {
templateUrl: 'views/result.html',
controller: 'categoryCtrl'
},
当我更改search-catalog
中的某些内容并且可以看到categoryCtrl中的更改时,更改不会反映在result
中。特别是,我有一个数组$ scope.items和ng-repeat不更新其值
答案 0 :(得分:1)
如上所述,categoryCtrl已经与两个独立的范围重复,因此如果修改搜索目录范围内的$ scope.items对象将不会反映在结果中范围。 如果您不介意在父作用域(目录)上移动逻辑,您还可以执行以下操作:
.state('catalog', {
url: '/catalog',
views: {
'': {
templateUrl: 'catalog.html',
controller: 'catalogCtrl'
},
'search-catalog@catalog': {
templateUrl: 'views/search-catalog.html'
},
'result@catalog': {
templateUrl: 'views/result.html'
}
}
.controller("catalogCtrl", function($scope) {
$scope.items = ["item1", "item2", "item3"];
});
在这种情况下,嵌套视图将绑定到同一个控制器/作用域。 如果要在嵌套视图和父视图之间分离逻辑,则应使用服务或工厂之类的单例,并将其注入嵌套视图中。
答案 1 :(得分:0)
AngularJS正在创建2个不同的控制器实例,因此两个控制器都会分隔范围。您在其中一个中所做的更改不会反映在另一个中。
有不同的方法可以实现您正在寻找的东西,您可以将需要在父控制器中共享的代码放置,或者您可以创建一个工厂(这是一个单例)来在两个控制器之间共享数据。 / p>
您还可以使用事件(广播,发射,开启)来传达控制器。