我正在尝试构建一个 Angular 应用程序,该应用程序将在不可靠的连接(即移动设备)下继续运行。
到目前为止,我为每个模型提供了服务(例如):
- 类(class)
- 学生
- 成绩
当创建每个模型的新实例时,它会被赋予一个 guid,直到我可以从服务器检索 ID。
当我尝试将它们连接到我的同步服务时,问题就出现了。理想情况下,类(class)、学生和年级服务需要访问同步服务,反之亦然,因此可以将新对象传递给同步服务,然后同步服务可以在成功联系服务器时直接更新其服务中的模型。一个身份证件。如果我尝试将服务相互注入(inject),则会出现循环依赖错误。
我如何在这些服务之间共享数据?我真的很想尝试避免重复代码来同步每个单独服务的模型(这也意味着大量的请求)?
编辑:
这是我想要实现的目标的简化示例:
angular.module('App')
.service('sync', function sync(students) {
var objectsToBeSynced = [];
function resync() {
// $http() to process and manage the pending objects
/**
* If request returns success, write into students.students[newIdFromServer] = students.students[oldId];
* then delete students.students[oldId];
*/
setTimeout(resync, 10000);
}
this.addToSync = function(object) {
objectsToBeSynced.push(object);
}
}
angular.module('App')
.service('students', function students(sync) {
var students = [];
this.students = students;
this.addStudent = function(student) {
sync.addToSync(student);
}
}
最佳答案
所有服务都依赖于sync
服务。因此,您只需在其他服务中添加同步服务依赖项即可。
如果模型对象相同,则同步服务对模型所做的任何更改(例如替换 id)都已可用于其他三个服务。
如果需要,您可以在服务上实现 insert 方法,以返回带有更新对象的 promise 。
更新:查看您的代码,我仍然觉得您不需要在 sync
服务中添加对学生服务的引用,只要同步服务所作用的对象即可与您的三个服务中的任何一个发送的相同。
所以
function resync() {
// $http() to process and manage the pending objects
/**
* If request returns success, and returns new id just update the existing object that is inside the objectsToBeSynced array, assuming you can correlate for which object you make request */
setTimeout(resync, 10000);
}
关于javascript - 在 angularjs 服务之间共享数据而不会出现循环依赖错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21140185/