【问题标题】:Conditional ngModel in Angular2Angular2中的条件ngModel
【发布时间】:2017-12-21 23:46:21
【问题描述】:

我有一个要求,我需要将电话号码绑定到 ngModel,如果它存在的话。我的代码如下:

<cd-input
  size="15"
  [(ngModel)]="phone_numbers[0].full_number"
  [reformat]="something"
  [format]="something"
  placeholder="(111) 222-3333">
</cd-input>

如果电话号码存在,这很好用,但如果不存在,我会收到以下错误:

无法读取未定义的属性“full_number”

因此,基于此 SO 帖子 LINK,我尝试了以下操作:

<cd-input
  size="15"
  [(ngModel)]="phone_numbers[0].length > 0 ? phone_numbers[0].full_number : null"
  [reformat]="something"
  [format]="something"
  placeholder="(111) 222-3333">
</cd-input>

但是,这会导致语法错误。

未捕获的错误:模板解析错误

解决此问题的一种方法是使用*ngIf 并再次重复该组代码。但是,我应该怎么做才能内联,比如三元条件检查?

【问题讨论】:

    标签: angular


    【解决方案1】:

    我会这样做:

    [ngModel]="phone_numbers && phone_numbers[0]?.full_number"
    (ngModelChange)="phone_numbers?.length && phone_numbers[0].full_number=$event"
    

    为什么?

    [(ngModel)] 扩展为[ngModel](输入)和(ngModelChange)(输出)。

    我通过了

    phone_numbers &amp;&amp; phone_numbers[0]?.full_number

    输入以确保我们的组件类中有phone_numbers 属性并且它至少有一项。我也在这里使用安全导航运算符

    当我们在输入中输入内容时,ngModelChange 处理程序被调用,我在这里做同样的事情来检查undefined 值,除非我不能在分配中使用安全导航管道((ngModelChange)="phone_numbers &amp;&amp; phone_numbers[0]?.full_number=$event" 不起作用)


    如果您使用 webstorm 并看到 Must be lValue 错误,请查看此答案:

    【讨论】:

    • 这实际上对我有用,但你能添加一些解释让我理解吗?
    【解决方案2】:

    对于此类绑定表达式,您需要拆分属性和事件绑定,例如:

    [ngModel]="phone_numbers[0]?.full_number" 
    (ngModelChange)="phone_numbers?.length && phone_numbers[0] ? phone_numbers[0].full_number=$event : null"
    

    【讨论】:

    • "phone_numbers?.length &amp;&amp; phone_numbers[0] ? phone_numbers[0].full_number=$event : null" ???。我收到如下错误:解析器错误:条件表达式 phone_numbers[0]?.length ? phone_numbers[0].full_number=$event 要求表达式末尾的所有 3 个表达式
    • 我忘记了最后一段 - 已修复
    • 如果这不起作用,请尝试添加括号(phone_numbers?.length &amp;&amp; phone_numbers[0]) ? ...
    猜你喜欢
    • 1970-01-01
    • 2016-11-20
    • 2017-01-16
    • 2017-09-26
    • 2016-12-12
    • 2016-11-07
    • 1970-01-01
    • 2017-05-12
    • 2017-09-18
    相关资源
    最近更新 更多