【问题标题】:Angular 2 Custom Pipe cannot read a property of nullAngular 2 Custom Pipe 无法读取 null 的属性
【发布时间】:2017-08-14 13:24:54
【问题描述】:

我正在尝试做一个自定义管道:

从“@angular/core”导入 { Pipe, PipeTransform };

@Pipe({
  name: 'doubleNumber'
})
export class DoubleNumberPipe implements PipeTransform {

  transform(value: any, ...args: any[]): any {
    if(value == null)
    {
        return null;
    }
    else{
        return value*2;
    }
  }

}

我在 app.module.ts 的声明装饰器部分声明了它:

declarations: [
AppComponent,
DataDrivenComponent,
DoubleNumberPipe

],

然后我创建了一个 HTML 表单来获取一个数字并将其加倍:

<div class="container">
  <div class="row">
    <div class="col-md-6 col-md-offset-3">
    <p>Number</p>
    <input type="text" #val (keyup)="0">
    <p>{{val.value | doubleNumber}}</p>
    <hr>
      <h1>Forms</h1>
      <hr>
    </div>
  </div>
</div>

结果页面只有“0”,出现如下错误:

例外:./DataDrivenComponent 类 DataDrivenComponent 中的错误 - 内联模板:37:54 原因:无法读取 null 的属性“值” ErrorHandler.handleError@error_handler.js:54(匿名)@ application_ref.js:261 ZoneDelegate.invoke @ zone.js:334 onInvoke @ ng_zone.js:273 ZoneDelegate.invoke @ zone.js:333 Zone.run @ zone.js:126(匿名)@ zone.js:713 ZoneDelegate.invokeTask @ zone.js:367 onInvokeTask @ ng_zone.js:264 ZoneDelegate.invokeTask @ zone.js:366 Zone.runTask @ zone.js:166 drainMicroTaskQueue @ zone.js:546

还有:

未处理的承诺拒绝:./DataDrivenComponent 类中的错误 DataDrivenComponent - 内联模板:37:54 原因:无法读取 null 的属性“值”;区域:;任务:Promise.then ;

【问题讨论】:

  • 试试这个val?.value,然后显示你的组件代码
  • 不。它不适用于猫王操作员

标签: angular


【解决方案1】:

这样试试elvis operator

<p>{{val?.value | doubleNumber}}</p>

【讨论】:

  • 不幸的是,是的。还是一样
【解决方案2】:

在这种情况下,您应该使用 ngModel。像这样的:

<input type="text" [(ngModel)]="val">
<p *ngIf="val">{{val | doubleNumber}}</p>

无需使用 keyup,这将自动更新您的 val。

【讨论】:

  • 查看我的更新答案。我将val 包裹在条件块中,因此只有在用户提供值时才会对其进行评估。
【解决方案3】:

正如 mickdev 所建议的......几乎是正确的,但您会收到 NaN 错误,因为您已将输入类型定义为 text

<input type="text" [(ngModel)]="val">
<p *ngIf="val">{{val | doubleNumber}}</p>

删除它,或替换为type="number"

<input [(ngModel)]="val">
<p *ngIf="val">{{val | doubleNumber}}</p>

【讨论】:

  • 它在 plnkr 链接上工作,但仍然有同样的错误。我会把这个答案设置为正确的,但仍然有同样的问题
  • 你能不能用你的代码来分叉我的 plunker,我很乐意看看:)
  • 好的,等几分钟
  • 现在可以看到了
  • 你是不是 fork 了,然后 url 改变了,所以你必须给 url :)
猜你喜欢
  • 2018-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 2017-07-16
相关资源
最近更新 更多