【问题标题】:Angular 2: Using pipes with ngModelAngular 2:在 ngModel 中使用管道
【发布时间】:2017-03-13 19:14:15
【问题描述】:

我在我的一个表单中使用了 JQuery 输入掩码以及 [(ngModel)],但由于某种原因它们不能一起工作。单独使用任何一个都可以很好地工作,但是将两者结合起来会完全破坏[(ngModel)],并且新输入不会被发送回组件。在为此苦苦挣扎了一段时间后,我认为使用 Angular 2 的管道将是一个很好的解决方案,但是我也不知道如何让这两者一起工作。

这是我用来测试管道的一些代码

<input [(ngModel)]="Amount" id="Amount" name="Amount" class="form-control" type="number" autocomplete="off">
<p>Amount: {{Amount | number:'1.2-2'}}</p>

如果我输入 12345,下面的 &lt;p&gt; 标记将显示 12,345.00,这正是我希望它过滤的方式,但我不想让过滤后的数量低于输入,我希望输入本身显示 12,345.00。像这样将相同的管道添加到ngModel[(ngModel)]="Amount | number:'1.2-2'" 给我以下错误。

解析器错误:第 10 列的操作表达式中不能有管道 在 [金额 |编号:'1.2-2'=$事件]

如何在 [(ngModel)] 的输入中使用管道(或输入掩码)?

【问题讨论】:

    标签: angular angular2-pipe angular2-ngmodel


    【解决方案1】:

    [(ngModel)] 是 [ngModel] 和 (ngModelChange) 的简写。如果将它们分开,它应该可以工作(它肯定适用于异步管道):

    [ngModel]="Amount | number: '1.2-2'" (ngModelChange)="updateAmount($event)"
    

    【讨论】:

    • 我明白了,效果很好,虽然现在我遇到了光标位置的问题,但我可能应该为此发布一个新问题。
    • 但是错误本身在哪里?堆栈是什么?它会到达您的更新处理程序吗?
    • 值为空时在十进制管道中抛出错误:管道'DecimalPipe'的参数''无效,并且当输入值为空时在处理程序上发生。我认为这是不保护空值的 Angular 错误。
    • 这样您就可以在您的金额中添加.startWith('')
    猜你喜欢
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 2016-09-20
    • 2017-03-13
    相关资源
    最近更新 更多