使用打字稿(angularjs)部分注入组件

时间:2018-12-17 11:11:11

标签: angularjs typescript

当前,我使用$inject在控制器中注入组件:

export class MyClass{

    public static $inject = [
        "$depedencyA",
        "$depedencyB",
        "$depedencyC"   
    ];

    constructor(
            private $depedencyA: IDependencyA,
            private $depedencyB: IDependencyB,
            private $depedencyC: IDependencyC         
        )
        {

        }

}

在创建MyClass之类的let myClassInstance=new MyClass();实例时,此方法很好用

但是,如果我想通过类本身不能直接注入的权限怎么办?

let myClassInstance=new MyClass(anotherDependency);

当然,我必须扩展MyClass才能在构造函数中接受此参数

constructor(
            private $depedencyA: IDependencyA,
            private $depedencyB: IDependencyB,
            private $depedencyC: IDependencyC,
            private $anotherDependency: any
        )
        {

        }

..但是由于参数数组不再匹配实际的构造签名,因此注入不再起作用。 我该如何解决?

1 个答案:

答案 0 :(得分:0)

这将不起作用:let myClassInstance=new MyClass();,因为您没有让angular为您捆绑依赖项。现在,您要负责提供该类中所有在您的示例中没有的依赖项。

如果您要自己更新这些对象,则添加其他依赖项时不会发生任何变化-您也必须手动提供此依赖项。

您真的无法使用angularjs的DI进行部分注入。您将需要自己重新创建该对象并提供所有依赖关系,或者必须将新的依赖关系注册为某种服务。