我的 Angular 应用程序后面的数据库中有一张用户表。我将登录、注册和用户管理 View 作为单独的页面。
我想定义一个服务,在加载用户对象时保留一个列表。如果从数据库中查询新用户,则应将记录传递给服务,并且服务应返回现有对象(如果可用)或创建新对象。此外,服务应该能够在收到指示时禁用未使用的对象,并且这些对象应该设置为未初始化的用户对象。如果随后调用 create,而不是创建新对象,它应该简单地设置旧对象。
我还想定义一个定义用户对象的服务(但是,它不应该被称为服务?)。这样,用户将不仅仅是一个已解析的 JSON 对象,还将被装饰以用于跟踪任何修改以及提交或还原这些更改的方法。
因为我有单独的页面,所有页面都使用用户对象。我想在每个页面上包含服务。根据 AngularJS 文档,要注册服务,我需要执行以下操作:
var myModule = angular.module('myModule', []);
myModule.factory('serviceId', function() {
var shinyNewServiceInstance;
//factory function body that constructs shinyNewServiceInstance
return shinyNewServiceInstance;
});
但是,此服务(据我所知)是内联的。我不想复制和粘贴代码。我想在单独的文件中定义服务。该服务应该不知道哪个模块正在调用它。它应该只是为了附加到一个模块而存在。
我尝试使用以下语法创建一个单独的文件 services/user.js
:
$provide.service('users', UserService);
这显然没有什么好处,因为 $provide 是未定义的。但是,我不知道如何在不将其附加到模块的情况下将 $provide
依赖项注入(inject)到服务中。
有没有办法定义一个独立于模块的服务?有没有办法定义一个模型,用特定于模型的功能装饰,独立于模块或服务?
最佳答案
您不能有孤立 服务。然而,这正是模块解决的问题。
您想定义一个包含此服务的 myBackend
模块,然后在您要使用该服务的任何应用中依赖此模块。
myBackend 模块:
var myBackend = angular.module('myBackend', []);
myBackend.factory('backendSerivce', function() {
var shinyNewServiceInstance;
//factory function body that constructs shinyNewServiceInstance
return shinyNewServiceInstance;
});
您想在哪里使用该服务:
var myModule = angular.module('myModule', [ 'myBackend' ]);
myModule.controller('myShinyController', function (backendService) {
// ...
});
现在您可以让您的各种应用程序忽略对象的 JSON 表示,而只从服务返回 User
对象。
关于javascript - 独立于多个页面上的模块的 AngularJS 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20448453/