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

jr.*_*jr. 8 angularjs ngresource

当你有一个JSON $资源时,如何在获得后将结果对象转换为更具体的对象?

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

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

最后,我怀疑这是否是一个合适的angularJS技术?或者这些辅助方法是否只显示在控制器或其他模块中并接受该对象的工作?我认为将它们包裹在物体中更清洁,但我承认我对angularJS不是很有经验.

Mar*_*der 22

如果您正在使用工厂并想要添加一个函数,您可以将函数添加到返回项目的原型(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;

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

然后在控制器中的资源上访问它:

$scope.appointments = Appointment.query({}, function() {
    console.log($scope.appointments[0].partOfDay())
});
Run Code Online (Sandbox Code Playgroud)

或者直接在视图里面例如ng-repeat:

{{appointment.partOfDay()}}
Run Code Online (Sandbox Code Playgroud)

为了回答你的上一个问题,我认为上述解决方案是一种适当的angularjs技术.只要您具有与特定资源类型相关联的功能,我认为最好将它们直接附加到相应的资源对象.当您必须将资源作为参数传递时,为什么要在控制器中创建辅助函数?此外,函数可以在多个控制器或作用域中使用?!