我正在进行ajax调用以从服务器获取一些信息,然后更新屏幕上的列表。信息又回来了,但是范围没有更新!我试过使用$ apply(),但只收到一个错误

代码如下:

在正确的控制器内,在HTML中:

<div ng-controller=controller_1>
  <div ng-controller=controller_2>

    <button ng-click="myfunction()">click</button>

  </div>
</div>


在角度controller_1中,我们定义了$scope.vendorsarray

在角度controller_2中,注入了$ scope,

$scope.function = function(){

  Factory.ajaxfactoryAction($scope.itemsarray).success(function(data, status, headers, config) {
    $scope.vendorsarray = data

    // POINT A
  }

// POINT B

}


现在,如果我在A点和B点,在B点(首先触发,因为它不必等待ajax)执行console.log($scope.vendorsarray),则得到旧的vendorsarray。然后在A处获得正确的新vendorsarray。但是然后vendorsarray仍未在浏览器中更新!这是怎么回事?

谢谢你的帮助。

编辑

这是我尝试实现$ apply()的方法:

$scope.function = function(){

  Factory.ajaxfactoryAction($scope.itemsarray).success(function(data, status, headers, config) {
    $scope.vendorsarray = data

    var temp = $scope.vendorsarray

    $scope.$apply(function() {
      $scope.vendorsarray = temp;
    });
  }

}


这是错误(在控制台中):

https://docs.angularjs.org/error/ $ rootScope / inprog?p0 = $ digest

Error: error:inprog
Action Already In Progress
$digest already in progress

最佳答案

但是,那时vendorsarray仍未在浏览器中更新!这是怎么回事?


这里的问题(用几句话来说)是每个控制器都有自己的$scope.vendorsarray副本。

您可以使用service在两个控制器之间共享数据模型。角服务是
单身人士。依赖于服务的每个组件都获得对服务工厂生成的单个实例的引用。

以下示例显示了此解决方案的基本结构:



var app = angular.module('module', [])

.factory('shared', function() {
    var shared = {
      "data": [],
      "counter": 0
    };
    return shared;
  })

.controller('Ctrl1', ['$scope', 'shared',
  function($scope, shared) {
    $scope.shared = shared;
    $scope.add = function() {
      $scope.shared.data.push("Item " + $scope.shared.counter++);
    }
  }
])

.controller('Ctrl2', ['$scope', 'shared',
  function($scope, shared) {
    $scope.shared = shared;
  }
]);

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="module">
  <div ng-controller="Ctrl1">
    CONTROLLER 1
    <button ng-click="add()">ADD</button>
  </div>
  <div ng-controller="Ctrl2">
    CONTROLLER 2
    <ul>
      <li ng-repeat="item in shared.data">{{item}}</li>
    </ul>
  </div>
</div>





有关:


What are the nuances of scope prototypal / prototypical inheritance in AngularJS?
Sharing model between controllers

07-25 22:02