2015-12-14 63 views
1

我正在尋找如何使用$ resource來POST數據的示例。我目前有這個工作代碼使用$ http,但是想用$ resource簡化它。

return $http.post("http://localhost:8080/calculate", JSON.stringify(formData)) 
       .then(function (response) { 
        if (typeof response.data === 'object') { 
         return response.data; 
        } else { 
         // invalid response 
         return $q.reject(response.data); 
        } 
       }, function (response) { 
        // something went wrong 
        return $q.reject(response.data); 
       }); 

我試過搜索周圍的例子,但一直沒能找到任何適合這種情況。

+0

https://docs.angularjs.org/api/ngResource/service/$resource具有示例代碼演示此 –

回答

1

定義你的資源是這樣的:

angular.module('app') 
.factory('MyResource', function ($resource) { 
    return $resource('', {}, { 
    'calculate': { method: 'POST', url: 'http://localhost:8080/calculate' } 
    }); 
}); 

或本:

angular.module('app') 
.factory('MyResource', function ($resource) { 
    return $resource('http://localhost:8080/calculate', {}, { 
    'calculate': { method: 'POST' } 
    }); 
}); 

然後你就可以使用它:

MyResource.calculate({}, JSON.stringify(formData), onSuccess, onError); 

用第一種方法,你可以定義與單獨的不同網站採取不同的行動資源(url屬性),有時可能有用,特別是當您使用的API不統一時。

當你有相同的端點和不同的請求方法時(比如在常規的RESTfull API中),第二種方法更好。在那裏你可以用不同的名字來定義它們(比如get,update,delete等)。

您也可以在某種程度上使用的資源,如:

var result = MyResource.calculate(JSON.stringify(formData)); 

也有可能獲得訪問內部$promise,所以你可以做一些更復雜的東西。

根據我的經驗,重要的是當您的API返回JSON數組時,您應該記住約isArray: true屬性。

所有的細節都描述如下:https://docs.angularjs.org/api/ngResource/service/$resource

+0

我能夠得到這個答案工作,但不得不完全限定計算內的url屬性,因爲它覆蓋了資源url。如果沒有這種更改,所有請求都會與Web應用程序一樣轉到相同的主機和端口。 – sworded

+0

對不起,我的錯。我正在寫這個答案很快而沒有改變來測試它,並忘記了這一點。我已經更新了答案。 – scareddragon

2

您首先爲Calculate創建一個$ resource類表示形式,如前所示。

此資源類具有保存功能,允許您根據需要發佈POST數據。

angular.module('myApp.services').factory('Calculate', function($resource) { 
    return $resource('http://localhost:8080/calculate'); 
}); 

angular.module('myApp.controllers').controller('ResourceController',function($scope, Calculate) { 
    $scope.calc = new Calculate(); //You can instantiate resource class 

    $scope.calc.data = JSON.stringify(formData); 

    Calculate.save($scope.calc, function() { 
     // Callback function to run once the data is saved. 
    }); 
}); 
+0

我不能得到這個工作。該服務總是獲得一個空的請求體。 – sworded