angular - 如何检测 Angular 2 组件是否具有属性

标签 angular typescript

假设我有一个像这样的 Angular 2 组件

@Component({
  selector: 'my-message',
  template: `
    <p *ngIf="messageWasSet">{{message}}</p>
    <p *ngIf="!messageWasSet">No message was specified</p>
  `
})
export class MessageComponent {
  @Input() public message: string;

  public messageWasSet: boolean; // How to calculate this?
}

以下是一些示例用法:

示例 1

<my-message message="Hi world"></my-message>

<!-- Rendered innerHTML -->
<p>Hi world</p>

示例 2

<!-- suppose obj.message = 'Viva Angular 2!' -->
<my-message [message]="obj.message"></my-message>

<!-- Rendered innerHTML -->
<p>Viva Angular 2!</p>

示例 3

<!-- suppose obj.message = undefined -->
<my-message [message]="obj.message"></my-message>

<!-- Rendered innerHTML -->
<p></p>

示例 4

<!-- Notice that there is no `message` binding at all -->
<my-message></my-message>

<!-- Rendered innerHTML -->
<p>No message was specified</p>

我的问题是如何在不使用 ElementRef 的情况下计算 messageWasSet bool 属性

最佳答案

@Component({
  selector: 'my-message',
  template: `
    <p *ngIf="messageWasSet">{{message}}</p>
    <p *ngIf="!messageWasSet">No message was specified</p>
  `
})
export class MessageComponent {
  private _message: string;      

  public get message() {
    return this._message;
  }

  @Input() public set message(value: string) {
    this.messageWasSet = true;
    this._message = value;
  }

  public messageWasSet: boolean; // How to calculate this?
}

关于angular - 如何检测 Angular 2 组件是否具有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39754656/

相关文章:

angular - ngrx:如何组合可观察对象以在异步管道中使用

javascript - 在 VSCode Explorer 中过滤掉 *.spec.ts 文件?

Angular 2 : Nested Observables in Guard

typescript - 将具有可为空字符串属性的接口(interface)转换为字符串属性

angular - 使用 Jasmine Karma 测试一个分支

angular - 引导多个根模块,每个模块都有不同的提供者(从外部提供)

angular - 如果用户在输入中写入日期,Material DatePicker 会错误解析

javascript - 如何在 Angular 2 Material 表的搜索结果中加粗搜索模式

javascript - 总值包含 Highcharts 中当前值的一部分

angular - 带有 angular-cli 的 SVG 图标系统