组件内的 Angular 2/4 访问指令数据

标签 angular angular2-directives

我有一个触发指令:

@Directive({
  selector: '[trigger]'
})

export class trigger {

    constructor(private svc: toggleService) {}

    @HostListener('click') onToggle() {
        this.svc.toggle();
    }
}

我还有一个目标指令:

@Directive({
  selector: '[target]'
})

export class target {

    constructor(private svc: toggleService) {}

    ngOnInit() {

        this.svc.onToggle.subscribe(
        (toggleState: boolean) => {
            this.toggleState = toggleState
        }
    }

}

他们通过服务进行通信。通信工作正常 - 目标成功从触发器接收 bool 状态。

<component-one>
   <button trigger></button>
</component-one>

<component-two>
   <div target></div>
</component-two>

如果我在目标内控制台登录,我会得到正确的切换状态。但是如何使toggleState 在组件二中可用?

最佳答案

您必须在这样的指令中使用@output

@Output() valueChange = new EventEmitter()

并在函数中使用

(toggleState: boolean) => {
            this.toggleState = toggleState
            this.valueChange.emit(toggleState)
        }

在您必须使用的按钮中

<div trigger (valueChange)="triggerChange($event)"></div>

您可以在triggerChange函数中获取值,您可以使用@input属性将其发送到第二个组件

或者您只需使用评论中描述的服务即可

关于组件内的 Angular 2/4 访问指令数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47415028/

相关文章:

angular - Ionic 2范围touchend事件

javascript - 防止在自定义事件后触发点击事件

Angular:我可以从服务获取对象,但似乎我没有正确分配对象

javascript - 更新输入会影响其他输入但没有绑定(bind)

javascript - Angular 2将html属性从父级传递给子级

angular - PhantomJS 不适用于 Angular2 项目中的 Karma

javascript - 如何注销 ipcRenderer.on 事件监听器?

angular - 在带有 *ngFor 的 Angular 2 模板中使用可观察对象

rest - 使用一个 REST 调用的 Angular2 多个组件

angular2-directives - 角度 2 : *ngFor variant