我目前正在使用Angular $资源来制作api,我想将这些结果保存在服务而不是控制器中,因为每次调用控制器时都会再次调用结果,因此任何更改被删除了。
我已经尝试了几篇SO文章中给出的答案,包括:
和
Angular Services/Factories with $resource
但这些都没有奏效,因为我需要存储在服务中的结果,但控制器可以访问。
非常感谢任何帮助。
答案 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
注入服务。