2013-07-15 85 views
0

Folk,Angularjs中的書寫資源

我很難理解如何在AngularJs中編寫資源。我目前寫了如下工廠方法:

var baseUrl = "http://www.myBaseUrl.com/cgi-bin/angular-portal/backend.pl"; 

    myApp.factory('Employee',['$http',function($http){ 
var employeeUrl = baseUrl + "?getemployeelist"; 
return{ 
query: function(){ 
    return $http.get(employeeUrl); 
}, 
get: function(empId) { 
    return $http.get(employeeUrl + '=' + empId) 
} 
}; 
]); 

如何在此包含POST調用?目前,我直接在控制器和我理解這使得一個POST調用是不是做的方式:

function EmployeeAddCtrl($scope,Employee,$routeParams) { 
// Add a new employee 
$scope.addOrUpdate = function() { 

var jsonString = angular.toJson($scope.employee); 

    //Make the REST call 
    $http.post(postUrl,jsonString) 
     .success(function(data,status,headers,config) { 
    // show success message here 
     }) 
     .error(function(data,status,headers,config){ 
    // DO SOMETHING HERE.. FIGURE LATER   
     }); 

} 
+0

我不明白問題是什麼?您可以像調用$ http.get一樣調用$ http.post,但包含數據作爲第二個參數。就使用控制器中的任何一個並讓它們處於服務狀態而言,就我所知,您有兩種選擇:$從控制器監視服務變量並更新範圍內的內容,或者獲得承諾從服務和範圍內使用它(我相信這是前進的正確方法,承諾可以通過鏈接以某種方式正確使用)。 – shaunhusain

+0

你說得對。我能夠簡單地包括$ http.post,它的工作。然而,我正在尋找的是如何將其轉換爲資源的理解 – runtimeZero

+0

對於RESTful服務器實現,建議使用$ resource服務,如果您有一個RESTful服務,那麼$ resource會在$ http服務上創建一個更高的抽象來處理使用適當的HTTP動詞和路徑與服務進行交互。 – shaunhusain

回答

2

使用角資源

http://docs.angularjs.org/api/ngResource $資源

這樣就可以了。做這樣的事情在一個服務:

mainApp.factory('ObjectService', function($resource,$location) { 

    var Object = $resource('/admin/object/:id',{id:'@id'}, 
     {update: {method:'PUT', params:{id:'@id'}}} 
    ); 

    Object.redirect = function(data){ 
     $location.path('/index'); 
    }; 

    Object.fail = function (e){ 
     alert('Alert Something went wrong') 
    }; 
    Object.new = function(){ 
     return new Object(); 
    } 
    return Object; 
}); 

,然後調用它像這樣一個控制器上:

function PromocionController($scope,$routeParams,ObjectService){ 

    if($routeParams.id){ 
     $scope.object = ObjectService.get({id:$routeParams.id}); 
     $scope.save = function(){$scope.object.$update({id:$scope.object.id},ObjectService.redirect,ObjectService.fail)}; 
    } else { 
     $scope.object = ObjectService.new(); 
     $scope.save = function(){$scope.object.$save({id:$scope.object.id},ObjectService.redirect,ObjectService.fail)}; 
    } 

    $scope.delete = function(){$scope.object.$remove({id:$scope.object.id},ObjectService.redirect,ObjectService.fail)}; 

} 

請注意2件事。 1)你可以做得更簡單我創建了更新方法之類的自定義方法,並將參數添加到刪除和保存方法中,以使其與Laravel資源控制器配合使用。 2)我在服務中添加了失敗和重定向功能,僅用於重用目的,如果您想要更簡單的示例,請閱讀以下內容:AngularJS $resource RESTful example