我有一个角度组件,可以在同一页面中多次重复使用。
角度组件依赖于服务,因为它被重复使用多次,我想为每个组件创建一个新的服务实例,这可能吗?或者我是否必须使用for循环并在服务内部为每个组件创建单独的对象以实现相同的效果?
编辑:我正在使用角度1
答案 0 :(得分:1)
您可以创建一个工厂(而不是服务),它返回一个甚至可以提供某些数据的函数(将其视为构造函数)。
angular
.module('app')
.factory('MyFactory', MyFactory);
function MyFactory() {
return (someOptions) => ({
myProperty: someOptions.myProperty,
myMethod: () => {
// ...
}
});
}
您可以在控制器中使用它,就像这样。每当您致电MyFactory({ ... })
新的单独"实例"将被创建。
angular
.module('app')
.controller('MyController', MyController);
function MyController(MyFactory) {
const myFactoryObj = MyFactory({ myProperty: 'test' });
}
答案 1 :(得分:0)
您可以在每个组件中使用该服务作为DI,然后每次调用该服务以创建新实例。您还可以在功能中设置'cache':true
,这样就不会对同一数据进行多次api调用。 (仅适用于' GET'方法)。这是否澄清了你的疑问?