对@output 装饰器行为感到困惑

Posted

技术标签:

【中文标题】对@output 装饰器行为感到困惑【英文标题】:Getting confused in @output decorator behaviour 【发布时间】:2020-03-04 00:33:43 【问题描述】:

我正在通过输入输出装饰器并尝试在下面的示例中实现演示目的,以了解这些装饰器的重要性:

home.component.html

<app-login>
  <app-checkbox (checkBoxValue)="checkBoxValueChanged($event)"></app-checkbox>
</app-login>

login.comp.ts

import  Component  from '@angular/core';

@Component(
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.css']
)
export class LoginComponent
  public checkBoxValueChanged(event)
    alert("called from here "+event)
  

login.comp.html

<form>
    <input type="text" placeholder="email"/>
    <input type="password" placeholder="password"/>
    <ng-content></ng-content>
    <input type="button" value="login"/>
</form>

checkbox.comp.ts

import  Component, EventEmitter, Output  from '@angular/core';

@Component(
  selector: 'app-checkbox',
  templateUrl: './checkbox.component.html',
  styleUrls: ['./checkbox.component.css']
)
export class CheckboxComponent
  @Output() checkBoxValue : EventEmitter<any> = new EventEmitter();
  valueChanged(value)
    this.checkBoxValue.emit(value)
  

checkbox.comp.html

<input type="checkbox" value="Y" (change)="valueChanged($event.target.value)"/> Remember Me 

根据我的理解,checkBoxValueChanged 应该在登录组件中,因为在登录组件中调用了复选框组件,但这不起作用。如果我在登录组件中写入 checkBoxValueChanged,我会收到 ERROR TypeError: _co.checkBoxValueChanged is not a function 的错误。但是当我在 home 组件中编写这个函数时,一切正常,但我很困惑为什么它在登录组件中时不起作用。

【问题讨论】:

因为 checkBoxValueChanged 在 HomeComponent 模板内部被调用。如果您在 home.comp.ts 中没有这样的方法,则会收到错误消息。你想做什么? 【参考方案1】:

当您在home.component.ts 中使用app-checkbox 组件时,您应该在home.component.ts 组件中拥有checkBoxValueChanged 函数,只需将checkBoxValueChanged 函数从login.comp.ts 移动到home.component.ts,您将收到发出的值,休息是完美的!

或者如果您想在login.comp.ts 中发出值,请不要遵循上述观点,而是将您的&lt;app-checkbox (checkBoxValue)="checkBoxValueChanged($event)"&gt;&lt;/app-checkbox&gt; 标签移动到login.comp.html...

希望对你有帮助!! :)

【讨论】:

以上是关于对@output 装饰器行为感到困惑的主要内容,如果未能解决你的问题,请参考以下文章

装饰器和指令在角度上有啥区别?

装饰器和指令在角度上有啥区别?

Python装饰器的通俗理解

结构篇-装饰器模式

关于何时在 TypeScript 中调用装饰器的困惑

大厂是怎么实践装饰器模式的?