javascript - 独立于多个页面上的模块的 AngularJS 服务

标签 javascript angularjs angularjs-service

我的 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/

相关文章:

javascript - 为什么推送在此 cookie 数组上不起作用?

angularjs - Angular 应用程序中实现的 Node 给出了语法错误和引用错误

javascript - 如何将共享服务与不使用共享服务的 Controller 一起使用?

javascript - Chrome 驱动 Protractor Angular 2 的元素不可点击

javascript - 获取 Angular 2 .ts 文件而不是 .d.ts 文件

javascript - 组合框列表无法显示数据库中的数据

javascript - 如何在 onmouseup 上获取坐标?

javascript - 如何使用 ng-click 切换类名

javascript - 从 1.3.x 错误 : $injector:modulerr 降级到 AngularJS 1.2.28

javascript - 服务内部的 AngularJS $http 请求