2015-11-16 89 views
0

我開始使用角一週前,我一直在敲我試圖解決這個問題。我有一個包裝$http的服務,因爲多個控制器調用相同的URL。有一個頁面在帖子上的服務器上有很多業務邏輯,所以我想打電話給$route.reload()。它似乎工作,因爲在vm.saveItem()控制器重新初始化後,但$http.get()從未將信號發送到服務器的新數據。我究竟做錯了什麼?

myModule.factory("itemRepository", function ($http) { 

    var baseUrl = "/api/inventory"; 

    return { 
     getLocations: function (itemName) { 
     return $http({ 
      url: baseUrl + "/" + itemName + "/locators", 
      method: "GET", 
      cache: false 
     }); 

     }, 
     addNewLocator: function (itemName, newLocator) { 
     return $http.post(baseUrl + "/" + itemName + "/locators", newLocator); 
     } 
    }; 

    }); 




// itemEditorController.js 

(function() { 
    "use strict"; 

    angular.module("app-inventoryitems") 
    .controller("itemEditorController", itemEditorController); 

    function itemEditorController($routeParams, $route, itemRepository) { 

    // initialize vars 
    var vm = this; 
    vm.itemName = $routeParams.itemName; 
    vm.errorMessage = ""; 

    // Models 
    vm.items = []; 
    vm.isBusy = true; 

    vm.newLocator = {}; 
    vm.newLocator.name = vm.itemName; 

    // PROBLEM HERE, does not call server after post new data 
    // and $route.reload() was called 
    itemRepository 
     .getLocations(vm.itemName) 
     .then(function (response) { 
     angular.copy(response.data, vm.items); 
     }, function (err) { 
     vm.errorMessage = "Failed to load batches."; 
     }) 
     .finally(function() { 
     vm.isBusy = false; 
     }); 

    vm.saveItem = function() { 
     vm.isBusy = true; 

     itemRepository.addNewLocator(vm.itemName, vm.newLocator) 
     .then(function (response) { 
      vm.newLocator = {}; 
      $route.reload(); 
     }, function (error) { 
      vm.errorMessage = "Failed to save new item."; 
     }) 
     .finally(function() { 
      vm.isBusy = false; 
     }) 
    } 
    } 
})(); 
+0

'false'對於'cache'不是一個有效的值,'GET'請求被瀏覽器緩存。 – zeroflagL

+0

你在哪裏檢查,該請求沒有發送? –

+0

所以是默認的假?它似乎你可以將其設置爲true(根據這篇文章http://stackoverflow.com/questions/14117653/how-to-cache-an-http-get-service-in-angularjs) –

回答

0

嘗試動態參數添加到您的要求:

$http({ 
     url: baseUrl + "/" + itemName + "/locators", 
     method: "GET", 
     cache: false, 
     params: { 
     r: Math.random().toString(16).substr(2) 
     } 
    }); 

如果問題解決了,需要找HTTP緩存策略。
谷歌爲必要的服務器端標題。

+0

我想我只是在stackoverflow中尋找錯誤的帖子。從你的幫助和@zeroflagL提醒我GET請求緩存我在這裏找到你的答案http://stackoverflow.com/questions/16971831/better-way-to-prevent-ie-cache-in-angularjs,其中也有一個第二個答案是更好一點。謝謝你的幫助。有更多積分的人可以將其標記爲dup –

+0

'某人可以標記爲dup' ...作爲所有者,您可以刪除此內容。 –

+0

我寧願繼續幫助其他搜索者,以防他們登陸我鏈接的其他問題。 –

相關問題