簡體   English   中英

如何在AngularJS中處理REST Api中的日期字段?

[英]How to handle date fields from a REST Api in AngularJS?

我有一個REST API,它返回標准ISO-8601格式的日期的JSON數據:yyyy-MM-ddTHH:mm:ss:

{
    id: 4
    version: 3
    code: "ADSFASDF"
    definition: "asdflkj"
    type: "CONTAINER"
    value: "1234"
    active: "false"
    formula: false
    validTo: "2014-12-31T05:00:00"
    validFrom: "2010-12-31T10:00:00"
}

我的問題是我不太確定如何在AngularJS中處理這個問題。 我有一個$resource GETs,POSTs等我的API端點,但是當我的數據被返回時,它被存儲在我的JS對象中,就像String一樣。 我認為它更容易處理為Date()或Moment()。

在Java中,我可以使用JsonDeserializer來確保在分配給模型之前正確轉換所有JSON數據,但我不知道AngularJS中是否存在類似的機制。

我已經四處尋找,但似乎找不到任何實現通用解決方案的東西。 我意識到我可以在我的$resource使用transformResponse函數,但對於可能包含日期的每種數據類型,這似乎都有很多重復配置。

這讓我想知道以ISO-8601格式返回日期是否是繼續進行的最佳方式? 如果AngularJS不支持開箱即用,我認為必須有一種更簡單的方法來處理日期。 如何處理AngularJS中的日期? 我應該將它們視為文本/字符串對象,並讓API返回預先格式化的版本嗎? 如果是這樣,在HTML5日期輸入框等中使用最靈活的格式是什么?

JSON不支持日期,因此您需要將日期作為字符串或整數發送,並在適當時將它們轉換為Date對象。 Angular不會為您執行此操作,但您可以將默認的transformResponse函數定義為$httpProvider 我嘗試使用$resource ,它確實對它有影響,畢竟, $resource$http的更高級抽象。

如果你不知道你的JSON的結構或者不想在轉換函數中依賴它,你只需要通過它並將類似日期的字符串轉換為Date對象。

var convertDates = function(input) {
  for(var key in input) {
    if (!input.hasOwnProperty(key)) continue;

    if (typeof input[key] === "object") {
      convertDates(input[key]);
    } else {
      if (typeof input[key] === "string" && /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/.test(input[key])) {
        input[key] = new Date(input[key]);
      }
    }
  }
}

app.config(["$httpProvider", function ($httpProvider) {
   $httpProvider.defaults.transformResponse.push(function(responseData){
     convertDates(responseData);
     return responseData;
  });
}]);

根據您的應用程序,從性能角度來看這可能是不明智的(例如,只有少數JSON響應包含日期或實際上需要轉換日期),因此最好轉換那些實際需要的控制器中的日期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM