【问题标题】:Service to communicate between parent directive and all children, angularjs在父指令和所有子指令之间进行通信的服务,angularjs
【发布时间】:2016-03-31 01:26:30
【问题描述】:

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

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

这个应用程序是用 TypeScript 和 AngularJS v1.4.7 编写的 - 感谢您的帮助!

【问题讨论】:

  • '是否有另一种 AngularJS 机制可以用于此目的?'答案是肯定的。 require 子指令中的父控制器。

标签: angularjs typescript angular-directive


【解决方案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 模板中出现更多样板,但至少这不是单例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多