簡體   English   中英

$ scope.variable在AJAX之后未更改

[英]$scope.variable not changed after AJAX

我正在進行ajax調用以從服務器獲取一些信息,然后更新屏幕上的列表。 信息回來了,但是范圍沒有更新! 我已經嘗試過使用$ apply(),但只收到一個錯誤

代碼如下:

在正確的控制器內,在HTML中:

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

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

  </div>
</div>

在angular controller_1 ,我們定義了$scope.vendorsarray

在角度controller_2 _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點執行console.log($scope.vendorsarray) (首先觸發,因為它不必等待ajax),所以我得到了舊的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

但是那時vendorarray仍未在瀏覽器中更新! 這是怎么回事?

這里的問題(用幾句話來說)是每個控制器都有自己的$scope.vendorsarray副本。

您可以使用服務在兩個控制器之間共享數據模型。 Angular服務是Singletons。 依賴於服務的每個組件都獲得對服務工廠生成的單個實例的引用。

以下示例顯示了此解決方案的基本結構:

 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> 

有關:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM