AngularJS的设计模式与具有一组公共字段的2个服务一起使用
What AngularJS design pattern to use with 2 services that have a common set of fields?
我遇到的情况是,我提出的每一个解决方案对我来说都不是很"有角度",所以这让我怀疑我是否在某个地方错过了一个明显的方法。我有两个共享一组公共字段的服务(在本例中,分页字段有助于在屏幕上分页数据)-
app.service('service1', [function () {
var model = this;
model.totalItems = 0;
model.currentPage = 1;
model.itemsPerPage = 10;
}
app.service('service2', [function () {
var model = this;
model.totalItems = 0;
model.currentPage = 1;
model.itemsPerPage = 10;
}
只有3个字段还不错,但随着添加了更多的字段和函数,我最终复制了大量代码。如果我只是使用这里的函数,我可以在两者之间共享一个公共服务,但由于我有数据,我不能使用singleton(两个服务都需要在字段中有自己的值)。在像C#这样的OO语言中,我会通过继承来解决这个问题,但在JS/Angular世界中,这似乎不受欢迎,因为它紧密地耦合了服务。有人能找到我所缺少的方法吗?
如果你觉得继承是建模的最佳方式,那么不要让Angular/JavaScript阻止你使用它。你可以在Angular中用这样的东西设置它:
var ParentService = function() {
this.totalItems = 0;
this.currentPage = 1;
this.itemsPerPage = 10;
}
var Service1 = function() {
ParentService.call(this);
}
Service1.prototype = Object.create(ParentService.prototype);
app.service('service1', Service1);
var Service2 = function() {
ParentService.call(this);
}
Service2.prototype = Object.create(ParentService.prototype);
app.service('service2', Service2);
如果构图看起来更合适,你可以用它来代替。例如:
var ItemPageModel = function() {
this.totalItems = 0;
this.currentPage = 1;
this.itemsPerPage = 10;
}
app.controller('itemPageModel', ItemPageModel);
var Service1 = function($controller) {
this.model = $controller('itemPageModel');
}
Service1.$inject = ['$controller'];
app.service('service1', Service1);
var Service2 = function($controller) {
this.model = $controller('itemPageModel');
}
Service2.$inject = ['$controller'];
app.service('service2', Service2);
相关文章:
- 使用connect vhost为多个express.js应用程序提供服务
- 通过共享服务在两个不同ng应用程序中的控制器之间共享数据
- 如何创建可从多个应用程序使用的PHP登录web服务
- 在一个服务中引用多个API调用(Angular)
- Angular 2:当第一个服务成功时,两个后端服务调用
- 如何在两个连续的角度服务呼叫期间中止/取消第一个呼叫的承诺
- 将单个服务逻辑应用于两个类似的按钮
- 在多个控制器中使用AngularJs服务
- 在angularjs中的服务中传递多个参数
- AngularJS,合并2个资源的服务
- 使用Web服务根据对另一个下拉框的选择填充第二个下拉框以获取信息
- 角度服务-多个查询和求和
- 具有使用 STOMP 调用的服务,该服务接受多个参数
- 开发两个单独的节点应用程序来提供 Web 服务和使用 Web 服务以在浏览器上呈现它是一个好主意吗?
- 如何处理对后端服务进行相同调用的多个浏览器脚本
- 使用服务更新 2 个控制器之间的共享数据
- 多个链式 jQuery AJAX POST Web 服务调用
- 如何在服务中定义数组并在 AngularJS 中的 2 个控制器之间共享它
- 角度$scope首先设置值而不是服务,然后第二个函数调用一切正常
- 使用node/express/jade,如何服务两个javascript文件中的一个,取决于第一个是否存在