我有一个指令,我打算包含许多其他指令,并且我打算在页面上有许多实例。我希望能够创建一个非单例服务,我可以为父指令创建一个新实例,然后使其可用于该树中的所有子指令,以便这些子指令可以影响父指令的行为。同时,一个父指令的服务不能修改其他父指令,并且对于它最初实例化的指令应该是唯一的。
理想情况下,我希望能够从每个子指令调用此服务上的函数,然后让它与其他服务或直接与父指令进行通信。但是,我知道服务是单身,所以这里的术语并不完全正确。我可以使用另一种AngularJS机制吗?
此应用程序使用AngularJS v1.4.7以TypeScript编写 - 感谢您的帮助!
答案 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模板中出现更多模板,但至少这不是单例。