Angular 6:在 ngOnInit 中使用 @Input 的值

Posted

技术标签:

【中文标题】Angular 6:在 ngOnInit 中使用 @Input 的值【英文标题】:Angular 6: use the value of an @Input within an ngOnInit 【发布时间】:2019-07-08 13:52:55 【问题描述】:

我想通过输入来检索模型车的值,但我不确定它是如何工作的。这是我尝试过的。

@Input() model : Car
car: Car;

    ngOnInit() 
        this.car= this.carService.getcar(model.id);
      

不幸的是模型总是空的。我该怎么办?

编辑: 父级 html

 <app-model
        [model]="car">
  </app-model>

父 ts 文件

ngOnInit
  this.shopService.get()
        .pipe(
          take(1),
          finalize(() => 
                    )
              )
         .subscribe(result => 
              this.car = result;
              );
          )
        )
 

【问题讨论】:

您的代码看起来不错,@Input() 属性将始终在 ngOnInit() 之前获取其值。使用 Visual Studio Code 和 tslint 来避免语法上的小问题。如果您的模型为空,请检查父组件 显示你使用这个组件的父组件代码并绑定输入模型 显示你的父组件 假设您的服务正常,仅使用 .subscribe 进行测试 【参考方案1】:

你必须使用@Input()(带括号)

【讨论】:

【参考方案2】:

在另一个组件的 HTML 中

<app-detail-component [model]="id: 1, name: 'Carname'"></app-detail-component>

在您描述的组件的 .ts 文件中(我假设组件的名称是 DetailComponent.ts)

@Input() model: Car;
car: Car;

ngOnInit() 
     this.car= this.carService.getcar(model.id);

官方文档链接: https://angular.io/guide/component-interaction

【讨论】:

【参考方案3】:

model 为空,因为在子组件中调用 ngOnInit 之后,分配了父组件中的变量 car。你需要在ngOnChanges中调用carService的方法,而不是ngOnInit

@Input() model: Car
car: Car;

ngOnChanges() 
  this.car = this.carService.getcar(model.id);

【讨论】:

@Jean 很高兴它有帮助:)

以上是关于Angular 6:在 ngOnInit 中使用 @Input 的值的主要内容,如果未能解决你的问题,请参考以下文章

Angular 中 ngOnInit() 上的动态创建类字段

我应该在 Angular 中再次调用 ngOnInit() 吗?

Angular 中 ngOnInit() 的意义是啥?

Angular`ngOnInit`中的异步/等待

在 Angular 5 中禁用 zone.js 后,ngOnInit 未触发

Angular2 - 在组件中测试 ngOninit