Ui-view不会更新控制器的值

时间:2017-11-05 11:39:28

标签: javascript angularjs controller

我有一个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不更新其值

2 个答案:

答案 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>

您还可以使用事件(广播,发射,开启)来传达控制器。