2015-09-04 60 views
0

我有一個簡單的CRUD,它與Angularjs放在一起。從產品列表顯示中,我將用戶傳遞給「新建」窗體的新視圖模板。

表單處理正常並更新數據庫。然後,我使用「$ location.path(url)」將用戶傳回列表顯示。

由於某些原因,當列表頁面顯示時,更改不會出現在$ scope中,您必須刷新頁面以查看更改。

樣品的編號:

$scope.acns = acnFactory.query() 
    .$promise.then(function (data) { 
     $scope.acns = data; 
    }); 

上述顯示器中的項目的列表。

$scope.createAcn = function() { 
    $scope.acn.isActive = true; 
    acnFactory.create($scope.acn); 
    $location.path('/acn'); 
} 

上述職位的新產品,然後重定向到列表頁面(/ ACN)

我的假設是,列表頁會重新處理或觀看更改$範圍,但認爲不更新。

+0

$ scope.acn和$ scope.acns之間的區別是什麼? – maddygoround

+0

$ scope.acns代表所有產品。 $ scope.acn是一個單一的產品。在第一個代碼塊中,我調用了acns列表。在第二個代碼塊中,我正在處理一個表單以「創建新的」acn。然後我回到/ acn視圖,它列出了所有的acns。 – crowsfeet

+0

它可能會發生,因爲它的異步調用我們的$範圍可能不會更新,請嘗試使用$ scope。$ apply()在$ scope.acns = data之後; ,只是爲了檢查天氣它做伎倆 – maddygoround

回答

0

問題是最有可能在這裏:

$scope.createAcn = function() { 
    $scope.acn.isActive = true; 
    acnFactory.create($scope.acn); 
    $location.path('/acn'); 
} 

創造一個產品肯定是由在發送HTTP請求到服務器。這是異步的。這意味着acnFactory.create()在請求發送後立即返回發送。未收到回覆後。

因此,此代碼發送創建產品的請求並立即進入列出產品的頁面。因此發送獲取產品列表的GET請求幾乎與用於創建新產品的GET請求幾乎同時發送。這兩個請求由服務器同時處理,並且返回的列表包含沒有新產品的列表,這是在單獨的事務中創建的。

在進入產品列表之前,您需要等待回覆,並確保其成功。假設服務返回承諾,因爲它應該這樣做:

$scope.createAcn = function() { 
    $scope.acn.isActive = true; 
    acnFactory.create($scope.acn).then(function() { 
     $location.path('/acn'); 
    }); 
}; 
+0

謝謝JB。真的很感激它。我實際上已經想通了,並使用了下面的代碼:$ scope.createAcn = function(){ $ scope.acn.isActive = true; (函數(){ $ scope.acns = acnFactory.query()) 。$ promise.then(function(){ $ location.path('/acn'); }); }); } – crowsfeet

+0

JB,不用說,你的代碼比我想出來的要好得多,它幫助我減少了一些問題。謝謝!!! – crowsfeet

相關問題