2013-11-23 32 views
2

我正在嘗試爲我的Angular App創建編輯視圖。我正在使用Restangular作爲處理我的CRUD操作的服務。用Angang Restangular編輯模型打破了PUT,因爲Restangular添加了模型ID

的Plunker這裏是一個很好的例子:http://plnkr.co/edit/d6yDka?p=preview&codekitCB=406920728.784061

但我不打算使用的決心。我並不是很樂意得到承諾傳遞給控制器​​。

雖然沒有什麼大不了的,但我只是在控制器中進行單個獲取,就像我爲了詳細視圖一樣。

表單字段填充很好。但是,當我執行PUT保存編輯時,它會將模型ID附加到URL,以便它有效地執行以下操作:/api/tasks/33/33。我如何得到它不將模型的ID附加到PUT發送數據的路徑上?

我認爲我可以用.put('tasks/' + $routeParams.taskId)之類的東西覆蓋.put()。但這不起作用。當然,假設Restangular root_api設置爲/api/。但是,這給我一個404錯誤,因爲它試圖分割.put("tasks/" + $routeProvider.taskId)的內容,然後將其附加到該API的URL。

那麼,我該如何得到Restangular停止將URL附加到URL?或者,如果我做錯了什麼,我該如何做到這一點?

這裏是我的代碼供參考。

var myApp = angular.module('myApp', [ 
    'ngRoute', 
    'ngAnimate', 
    'restangular', 
    'myAppControllers' 
]); 

myApp.config(
    function($routeProvider, RestangularProvider) { 
     $routeProvider. 
      when('/tasks/edit/:taskId', { 
       templateUrl: '/static/partials/task-edit.html', 
       controller: 'TaskEditCtrl' 
      }). 
      otherwise({ 
       redirectTo: '/tasks' 
      }); 

      RestangularProvider.setBaseUrl('/api/'); 
      RestangularProvider.setParentless(true); 
      RestangularProvider.setDefaultHttpFields({xsrfCookieName:'csrftoken', xsrfHeaderName:'X-CSRFToken'}); 
}); 

var myAppControllers = angular.module('myAppControllers', [ 
    'restangular' 
]); 

myAppControllers.controller('TaskEditCtrl', ['$scope', 'Restangular', 

    function($scope, Restangular) { 

     $scope.successMessage = true; 

     Restangular.one("tasks/" + $routeParams.taskId).get().then(function(task){ 
      $scope.task = task; 
     }) 

     var original = task; 

     $scope.task = Restangular.copy(original); 

     $scope.isClean = function() { 
      return angular.equals(original, $scope.task); 
     } 

     $scope.save = function() { 
      $scope.task.put().then(function(task) { 
       $scope.successMessage = false; 
      }); 
      console.log('saved'); 
     } 
    } 

]); 

回答

1

與其說Restangular.one('tasks/' + <id>),你真正的意思做的是Restangular.one('tasks', <id>)。這樣Restangular知道該路線確實是tasks而不是tasks/<id>

+0

這是行不通的。 URL的結果相同。實際上,這樣做會創建此URL:/ api/tasks/33/33?0 = t&1 = a&2 = s&3 = k&4 = s&5 = 3&6 = 3。所以,也許我已經設置了錯誤? –

+0

是的,那麼我有一種錯誤配置的感覺。然而,我沒有看到任何東西用你提供的代碼跳出來。它看起來像是試圖把你提供的url作爲GET參數,並將字符串分解爲它的'字符。 –

+0

如果我根本不想要身份證,該怎麼辦?說資源是一個單一的資源,它不是一個集合,也沒有子對象。我怎樣才能引用單個資源,例如'http:// e.com/singleresource'。 – CMCDragonkai