Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 2个具有公共字段集的服务使用哪种AngularJS设计模式?_Javascript_Angularjs_Inheritance - Fatal编程技术网

Javascript 2个具有公共字段集的服务使用哪种AngularJS设计模式?

Javascript 2个具有公共字段集的服务使用哪种AngularJS设计模式?,javascript,angularjs,inheritance,Javascript,Angularjs,Inheritance,我遇到的情况是,我提出的每一个解决方案对我来说都不是很“有棱角”,所以这让我怀疑我是否遗漏了一个明显的方法。我有两个共享一组公共字段的服务(在本例中,分页字段有助于在屏幕上分页数据)- 仅使用3个字段并不太糟糕,但随着我添加了更多字段和函数,我最终复制了大量代码。如果我只是在这里使用函数,我可以在两者之间共享一个公共服务,但是由于我有数据,我不能使用单例(两个服务在字段中都需要自己的值)。在像C#这样的OO语言中,我会通过继承来解决这个问题,但在JS/Angular世界中,这似乎是不受欢迎的,因

我遇到的情况是,我提出的每一个解决方案对我来说都不是很“有棱角”,所以这让我怀疑我是否遗漏了一个明显的方法。我有两个共享一组公共字段的服务(在本例中,分页字段有助于在屏幕上分页数据)-


仅使用3个字段并不太糟糕,但随着我添加了更多字段和函数,我最终复制了大量代码。如果我只是在这里使用函数,我可以在两者之间共享一个公共服务,但是由于我有数据,我不能使用单例(两个服务在字段中都需要自己的值)。在像C#这样的OO语言中,我会通过继承来解决这个问题,但在JS/Angular世界中,这似乎是不受欢迎的,因为它将服务紧密地结合在一起。任何人都有我所缺少的方法吗?

如果您觉得继承是建模的最佳方式,那么不要让Angular/JavaScript阻止您使用它。你可以用这样的东西把它设置成角度:

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);
如果构图看起来更合适,你可以用它来代替。e、 g:

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);

“在像C这样的OO语言中,我会用继承来解决这个问题…”,在你的问题的上下文中是什么,如何?你需要将你的模型添加到(如果范围是共享的)或(如果不是)。你可以有一个工厂,为你的模型返回一个构造函数。然后在每个服务中创建一个包含所有属性的模型。那么您只有一个地方可以添加到模型中。Khnle-Kevin Le:我将创建一个包含公共字段的基本服务类,然后这两个服务的定义如下-‘public service1:baseService’。这将为service1和service2字段提供这些名称,但它们都将保留各自的值。@PM77-1:您是对的,这就是我访问服务的方式,但我不知道这将如何帮助它们之间的代码复制。谢谢。这就是我使用javascript原型继承的基本路线。
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);