角度指令的非单件服务

时间:2017-06-15 23:20:11

标签: angularjs

我有一个角度组件,可以在同一页面中多次重复使用。

角度组件依赖于服务,因为它被重复使用多次,我想为每个组件创建一个新的服务实例,这可能吗?或者我是否必须使用for循环并在服务内部为每个组件创建单独的对象以实现相同的效果?

编辑:我正在使用角度1

2 个答案:

答案 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'方法)。这是否澄清了你的疑问?