【问题标题】:Angular2 Child Component with OPTIONAL Input具有可选输入的 Angular2 子组件
【发布时间】:2017-01-16 15:38:51
【问题描述】:

TLDR:@Input 可以是可选的吗?

所以我有这个子组件,它是创建交易的模式(以银行术语),我想将此模式升级为创建或更新交易。

目前模态只是一组输入字段和一个用于创建的提交按钮。 我想要实现的是,当该组件将事务作为输入时,它将处于“编辑模式”,而当它没有时,它将处于“创建模式”(意味着输入字段将已填充数据在编辑模式下,在创建模式下为空)

@Input transaction 可以是可选的吗?

【问题讨论】:

    标签: angular components


    【解决方案1】:

    是的。更重要的是,如果您需要更改,只需执行此操作

    <div *ngIf="transaction">Some edit stuff</div>
    <div *ngIf="!transaction">Create stuff</div>
    

    如果你想要特定的东西

    ngOnInit() {
      if(!this.transaction) { 
        // create stuff only 
      } else {
        // update stuff only
      }
    }
    

    编辑:我会怎么做(在你的情况下)

    这可能不是最好的解决方案,但应该可以(如果我没有弄错语法的话)

    ngOnInit() {
      if(!this.transaction) { 
        this.transaction = new Transaction();
      } 
    }
    

    这样所有类属性都可用,只有空的。除非您希望它们预定义,否则您可以在构造函数或 ngOnInit 中设置它们。

    【讨论】:

    • 我不希望在我的模板中发生双重元素,我只是希望&lt;input&gt; 是否填充数据,因此我想使用可选的@Input ,你说有可能,那我该如何实现呢?
    • 我编辑了。我真的不知道这是否是一个好的解决方案,但这样的事情对我有用
    • 我明白了,这样我就可以放置&lt;create-update-transaction [transaction]="this.transaction&gt;&lt;/create-update-transaction&lt;create-update-transaction&gt;&lt;/create-update-transaction&gt;
    • 就是这样
    • 所以我已经按照您的建议取得了成功,只是我没有检查构造函数中的输入并初始化属性声明中的输入,如下所示:@Input() transaction: Transaction = new Transaction(),它工作正常,谢谢很多:)
    猜你喜欢
    • 2016-10-03
    • 2017-04-06
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    相关资源
    最近更新 更多