在工厂中存储角度资源的结果

时间:2016-02-11 00:04:23

标签: javascript angularjs angular-resource angular-services angular-controller

我目前正在使用Angular $资源来制作api,我想将这些结果保存在服务而不是控制器中,因为每次调用控制器时都会再次调用结果,因此任何更改被删除了。

我已经尝试了几篇SO文章中给出的答案,包括:

AngularJS: Using Shared Service(with $resource) to share data between controllers, but how to define callback functions?

Angular Services/Factories with $resource

但这些都没有奏效,因为我需要存储在服务中的结果,但控制器可以访问。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

由于Angular的服务/工厂是单身,如果您只是将回调的值放在服务变量上,您就可以从任何地方获取它。 样品:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'Feedback.coach_mark' doesn't exist
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_72]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_72]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_72]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_72]
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:404) ~[mysql-connector-java-5.1.38.jar:5.1.38]
    at com.mysql.jdbc.Util.getInstance(Util.java:387) ~[mysql-connector-java-5.1.38.jar:5.1.38]
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:939) ~[mysql-connector-java-5.1.38.jar:5.1.38]
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878) ~[mysql-connector-java-5.1.38.jar:5.1.38]

很高兴能够记住$ resource正在向后端发出异步请求,因此在尝试从服务中获取数据之前保证这些数据可用是很好的。

答案 1 :(得分:0)

始终使用承诺!

angular.module('foo',[])
  .service('FooService', ['$resource', function($resource){
    this.getUsers = function () {
      return $resource('/users', .get().$promise;
    };
  })
  .controller('FooController', ['$scope','FooService', function($scope, FooService){
    FooService.getUsers()
      .then(function (users) {
        $scope.users = users;
      });
  });

您还可以将$resource('/users')重构为UserResource工厂,并将UserResource注入服务。