服务在父指令和所有子节点之间进行通信,angularjs

时间:2015-12-24 16:30:32

标签: angularjs typescript angular-directive

我有一个指令,我打算包含许多其他指令,并且我打算在页面上有许多实例。我希望能够创建一个非单例服务,我可以为父指令创建一个新实例,然后使其可用于该树中的所有子指令,以便这些子指令可以影响父指令的行为。同时,一个父指令的服务不能修改其他父指令,并且对于它最初实例化的指令应该是唯一的。

理想情况下,我希望能够从每个子指令调用此服务上的函数,然后让它与其他服务或直接与父指令进行通信。但是,我知道服务是单身,所以这里的术语并不完全正确。我可以使用另一种AngularJS机制吗?

此应用程序使用AngularJS v1.4.7以TypeScript编写 - 感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以在父指令中创建对象的实例,并将其传递给指令属性中的每个子对象。

class parentDirective {
    instanciatedService : MyService;
    constructor() {
        this.instanciatedService = new MyService();
    }
}

template : `
<parent>
    <child custom-service="vm.instanciatedService"></child>
</parent>
`,
controllerAs : 'vm'

在孩子的指令中

bindToController /* or scope */ {
    customService: "="
},

在父指令中,您实例化instanciatedService,然后子节点和父节点可以访问同一个对象。它是一种通过指令属性的依赖注入。

这显然会导致html模板中出现更多模板,但至少这不是单例。