在javascript/angular中扩展对象
因此,我的angular应用程序中有一个tree helper对象,它提供了一系列有用的函数,用于处理应用程序中的许多树结构。这是由工厂提供的,因此每当某个控制器(或任何东西)请求树助手时,它都会得到自己的副本:在javascript/angular中扩展对象,javascript,angularjs,Javascript,Angularjs,因此,我的angular应用程序中有一个tree helper对象,它提供了一系列有用的函数,用于处理应用程序中的许多树结构。这是由工厂提供的,因此每当某个控制器(或任何东西)请求树助手时,它都会得到自己的副本: angular.module('MainApp').factory('TreeHelperFactory', function ($http, $q, $filter, DataService) { var treeHelper = new function ($http,
angular.module('MainApp').factory('TreeHelperFactory',
function ($http, $q, $filter, DataService) {
var treeHelper = new function ($http, $q, $filter, DataService) {
...
code
...
})
现在我有了一个category服务,它提供了各种与类别相关的功能,包括返回一个类别树并提供操作该树的方法。因此,像一个OO开发人员一样,我认为category服务实际上就像我的tree helper的一个子类,因此我插入了一个tree helper实例,然后尝试使用特定于类别的函数扩展该实例,天真地如下所示:
angular.module('MainApp').provider('CategoryService',
function() {
this.$get = function ($http, $q, $filter, DataService, TreeHelperFactory) {
var catService = TreeHelperFactory;
catService.listCategories = function() {...}
catService.deleteCategory = function(id) {...}
... more code...
return catService;
}
}
);
但这不起作用。当我稍后尝试调用这些新属性时,它们不可见,只有原始factory对象的树帮助器属性。我遗漏了什么?我该如何做到这一点?依赖Angular services的Helper对我来说是一个坏消息-几乎就像它的状态不仅仅是一个Helper,它还包含一两个service。您是否能够通过重组其角色和职责来重新考虑这一点?angular.js中的服务是单例的,这意味着每次注入服务时,它都返回完全相同的对象,您无法强制它每次注入时都返回新对象 您可以做的是创建一个
类
函数,例如:
angular.module('MainApp')
.factory('TreeHelperFactory',
function ($http, $q, $filter, DataService) {
/**
* TreeHelper constructor
* @class
*/
function TreeHelper() { /* this.init(); */ }
/**
* TreeHelper static class method
*/
TreeHelper.list = function() { /* ... */ };
/**
* TreeHelper instance method
*/
TreeHelper.prototype.init = function() { /*...*/ };
/**
* Returns the class
*/
return TreeHelper;
})
现在您可以注入它,实例化一个对象并像这样扩展它:
.factory('CategoryService', function (TreeHelperFactory) {
var catService = new TreeHelperFactory();
catService.listCategories = function() { /*...*/ };
catService.deleteCategory = function(id) { /*...*/ };
return catService;
});
您也可以使用,但我认为在大多数情况下这是一种过度使用,因此如果可以的话,请保持简单。谢谢-我知道服务是单例的,但阅读有关工厂的文档时,我不太确定它们返回的状态。我将尝试上面的方法,看看这是否有效。“Helper”是我能想到的最好的词,但我真正的意思是提供特定功能的可注入对象,它不是单例对象,因为我需要它来存储数据。基本上是一个可以扩展的类。