角度资源创建日期对象

Tin*_*ino 15 javascript date angularjs

我正在使用$ resource来操纵我的数据.我想把它们转换成日期对象时将它们转换成日期对象.它只是使用datepicker等更容易.

我的工厂:

AppFactories.factory("Books", ['$resource' ,function($resource){

  return $resource(
        "/books/:id",
        {id: "@id" },
        {
            "update": {method: "PUT", isArray: true },
            "save": {method: "POST", isArray: true },

        }
    );

}]);
Run Code Online (Sandbox Code Playgroud)

我可以在工厂内创建一个函数,以便在发布/更新时将日期从数据库转换为日期对象,反之亦然?

将它集成到工厂是非常好的,这样我就可以重复使用它.

djs*_*ner 12

相反,在每一个资源这样做的是更详细的描述,你可以把它应用到底层$ HTTP 这里.

app.config(["$httpProvider", function ($httpProvider) {
     $httpProvider.defaults.transformResponse.push(function(responseData){
        convertDateStringsToDates(responseData);
        return responseData;
    });
}]);
Run Code Online (Sandbox Code Playgroud)


jak*_*kee 10

$resource动作对象可以有一个名为属性interceptor,它允许你定义一个interceptor用于这个特殊的操作对象(像$ HTTP拦截).您可以为此拦截器定义responseresponseError属性.这样,您可以为资源提供的操作定义一些日期解析功能:

function parseResponseDates(response) {
  var data = response.data, key, value;
  for (key in data) {
    if (!data.hasOwnProperty(key) && // don't parse prototype or non-string props
        toString.call(data[key]) !== '[object String]') continue;
    value = Date.parse(data[key]); // try to parse to date
    if (value !== NaN) data[key] = value;
  }
  return response;
}

return $resource('/books/:id', {id: '@id'},
  {
    'update': {
      method: 'PUT', 
      isArray: true, 
      interceptor: {response: parseResponseDates}
    },
    ....
  }
);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

  • 您应该将"if(value!== NaN)"切换为"if(!isNaN(value))".该行将始终评估为false. (4认同)