2013-07-22 49 views
1

這裏的設置示例:角JS雙重請求

var editor = angular.module("editor",['ngResource']); 
editor.factory("Provider",function($resource){ 
    return $resource('/api/test/1').get(); 
}) 

function ctrl($scope,Provider){ 
    $scope.sections = Provider; 
} 

我的問題是,在螢火我看到有雙向發送GET請求:一個在/ API /測試/ 1和一個在/ API /測試/ 1 /。

任何想法可能導致這種情況?

+0

你創建CTRL的多個實例?如果你有多個這種類型的控制器,那麼每個函數都會被調用,在這種情況下,這個函數會調用$ resource上的get()。如果你想要一個單實例使用服務而不是工廠 – shaunhusain

+0

不,我只使用「ctrl」一次,只是嘗試使用服務,但它是一樣的 –

+1

你可以讓一個jsfiddle這個或一個plunkr來顯示問題的行動嗎?目前爲止,我的服務中只使用了$ http,但沒有看到任何雙重調用行爲......雖然我大部分都是在Chrome中進行測試。 – shaunhusain

回答

1

我發現/1後只需添加/#解決了這個問題。

變化:

return $resource('/api/test/1').... 

到:

return $resource('/api/test/1/#').... 
1

爲了完成起見,我認爲$http會在您的文件夾結構中「短路」,只需抓取指向它的資源並在項目中可訪問,而$resource適用於與外部源進行通信,通常是一個外部RESTful API。在應用中,我實現這一點,我經常定義一個變量,在我的各種$resource定義可以訪問它,因爲你會在看到我定義的變量API

它也出現在這種情況下,要傳遞1爲某種ID。

var API = 'http://localhost\\:#####/api/'; 

editor.factory('Provider', function ($resource) { 
    return $resource(API + 'test/:id', { id: '@id' }, { }); 
}); 

然後執行

function ctrl($scope, Provider){ 
    var myVarToPass = 1; 

    Provider.get({ id: myVarToPass }, function (result) { 
     //single call here as soon as controller loads 
    }); 
}