2016-03-22 55 views
1

如您所知,Angular最近棄用了http.get.success,error函數。因此,在您的控制器不建議使用這種電話了:

$http.get("/myurl").success(function(data){ 
    myctrl.myobj = data; 
})); 

相反,這種電話將被使用:

$http.get("/myurl").then(
    function(data) { 
     myctrl.myobj = data; 
    }, 
    function(error) { 
     ... 
    } 

問題是,簡單的Spring REST模式不與工作這個新的代碼。我最近下載的樣本代碼與上面的舊成功函數和REST模式是這樣的:

@RequestMapping("/resource") 
public Map<String,Object> home() { 
    Map<String,Object> model = new HashMap<String,Object>(); 
    model.put("id", UUID.randomUUID().toString()); 
    model.put("content", "Hello World"); 
    return model; 
} 

這應該返回一個地圖就像{id:<someid>, content:"Hello World"}$http.get()電話,但它什麼也不接收 - 視圖爲空。

我該如何解決這個問題?

+0

您可以通過使用瀏覽器怎麼做呢? –

+0

是的,我可以:'{「id」:「f77e3886-976b-4f38-b84d-ae4d322759d4」,「content」:「Hello World」}' – cst1992

+0

它是否與'success()'一起工作,而不是()? –

回答

1

結果的期望是不同的。它的響應,而不是直接的數據對象。

documentation說:響應

// Simple GET request example: 
$http({ 
    method: 'GET', 
    url: '/someUrl' 
}).then(function successCallback(response) { 
    // this callback will be called asynchronously 
    // when the response is available 
    }, function errorCallback(response) { 
    // called asynchronously if an error occurs 
    // or server returns response with an error status. 
    }); 

屬性是

data – {string|Object} – The response body transformed with the transform functions. 
status – {number} – HTTP status code of the response. 
headers – {function([headerName])} – Header getter function. 
config – {Object} – The configuration object that was used to generate the request. 
statusText – {string} – HTTP status text of the response. 

由於需要對數據對象,

請轉換代碼

$http.get("/resource").then(
    function(response) { 
     myctrl.myobj = response.data; 
    }); 
5

傳遞給success()的第一個(四個)參數是響應的數據(即正文)。

但傳遞給then()的第一個(也是唯一的)參數不是數據。這是完整的HTTP響應,包含數據,標題,狀態和配置。

所以你真正需要的是

$http.get("/myurl").then(
    function(response) { 
     myctrl.myobj = response.data; 
    }, 
    function(error) { 
     ... 
    }); 
+0

我會試試看看。 – cst1992

+0

這適用於'response.data'。 – cst1992

-1

然後必須返回一個新的承諾,所以你應該與延期處理。

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

myApp.factory('modelFromFactory', function($q) { 
return { 

     getModel: function(data) { 
     var deferred = $q.defer(); 
     var items = []; 
      items.push({"id":"f77e3886-976b-4f38-b84d-ae4d322759d4","content":"Hello World"}); 
     deferred.resolve(items); 
     return deferred.promise; 
    } 
}; 
}); 

function MyCtrl($scope, modelFromFactory) { 
modelFromFactory.getModel() 
    .then(function(data){ 
     $scope.model = data; 
}) 

} 

這裏是工作提琴 - >https://jsfiddle.net/o16kg9p4/7/

+0

答案與問題無關。 OP詢問有關處理http請求 –

+0

我只想表現出他可以成功實現的新傳統,但他要求我們以另一種方式工作。即時試圖幫助他,你不喜歡這麼傷心。 – nolines

+0

僅僅因爲你可以寫東西並不意味着它需要被寫入。在提到的情況下,延遲無效 –

相關問題