带有方法的AngularJS自定义模型对象?

标签 angularjs ngresource

当您拥有 JSON $resource 后,如何将生成的对象转换为更具体的对象?

例如,现在它们以对象数组的形式返回,但我希望它们以“约会”对象数组的形式返回,这样我就可以在该约会对象上有一些方法来回答有关该约会对象的问题。例如:此约会是否有任何与之相关的服务?这个预约是上午还是下午?

起初我认为 transformResponse 钩子(Hook)可以从 ngResource 工作,但这似乎不起作用。从中返回的不是实际的对象。似乎使用该功能您只能在 JSON 解析之前修改实际数据。

最后,我质疑这是否是一种合适的 angularJS 技术?或者这些辅助方法是否应该只显示在 Controller 或其他模块中并接受要处理的对象?我只是认为将它们包裹在对象中更干净,但我承认我在 angularJS 方面不是很有经验。

最佳答案

如果您正在使用工厂并且想要添加一个函数,您可以例如将该函数添加到返回项目的原型(prototype) (DEMO):

app.factory('Appointment', ['$resource', function($resource) {
  var Item = $resource('appointments.json',{/*bindings*/},{/*actions*/});

  Item.prototype.hasServices = function() {
    if(this.services.length > 0) return true;
    else return false;
  };

  Item.prototype.partOfDay = function() {
    if(this.time.split(':')[0] > 12) return "afternoon";
    else return "morning";
  };

  return Item;

}]);

然后在 Controller 中的资源上访问它:
$scope.appointments = Appointment.query({}, function() {
    console.log($scope.appointments[0].partOfDay())
});

或者直接在 View 里面,例如一个 ng-repeat:
{{appointment.partOfDay()}}

要回答您的最后一个问题,我认为上述解决方案是一种合适的 angularjs 技术。
一旦您拥有与特定资源类型关联的函数,我认为最好将它们直接附加到相应的资源对象。当您必须将资源作为参数传递时,为什么还要在 Controller 中创建辅助函数,并且这些函数可以在多个 Controller 或范围内使用?!

关于带有方法的AngularJS自定义模型对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18300599/

相关文章:

javascript - 将服务值直接调用到指令中

angularjs - 在查询参数中使用 mongoDB ObjectID,它会影响 SEO 吗?

javascript - & 导致字符串在发送到服务器时 split

angularjs - ngResource 中的虚拟属性

javascript - 如何正确调用我的工厂服务?

angularjs - 通过 `params` 嵌入 View ui-router

node.js - Heroku 部署错误 : Cannot find module './errors/cast'

angularjs - ngResource 将 POST 参数附加到 url

javascript - 我应该如何将 ngResource 与特定的响应主体一起使用?

javascript - 处理同一页面中多种表单的 Angular ng-model