【问题标题】:ngOnChanges is not triggeredngOnChanges 没有被触发
【发布时间】:2019-01-30 06:09:30
【问题描述】:

您好,我是 Angular 新手,遇到了一个小问题,这是我的代码:

import { Component, OnInit,Input, SimpleChange, OnChanges } from '@angular/core';
import { Sensor } from '../../shared/sensor.model';
import { MessageService } from '../../shared/message.service';

@Component({
  selector: 'app-sensor-list',
  templateUrl: './sensor-list.component.html',
  styleUrls: ['./sensor-list.component.css']
})
export class SensorListComponent implements OnInit {

  sensors:Sensor[]=[];
  sensorsId : number[]=[];
  @Input() messages:JSON[]=[];
  constructor(private messageService: MessageService) { }

  ngOnInit() {
    setInterval(()=>{
      this.messages=this.messageService.getMqttdata();
      console.log("updating Sensors sources")
    },5000);
  }

  ngOnChanges(changes SimpleChange }) {
      console.log("sources has been modified")
  }

在 ngOnInit 中,我每 5 秒收集一次数据并将这些数据存储到我的消息变量中,这是一个 Input(),因此它应该每 5 秒触发一次 ngOnChanges 吗?我错过了什么?

【问题讨论】:

    标签: angular typescript ngonchanges


    【解决方案1】:

    @Input 属性应该是该组件的父级将传递给它的东西。它不应该从该组件内的服务接收。

    如果是这样的话,这个服务调用应该驻留在使用这个组件的父组件中。

    所以如果你有一个组件(比如selectorapp-home),那么在app-home 的模板中,你将使用app-sensor-list,你将从那里传递messages

    类似这样的事情:

    <app-sensor-list [messages]="messages"></app-sensor-list>
    

    再次在 app-home 组件的 TypeScript 类中,您将进行服务调用:

    ngOnInit() {
        setInterval(()=>{
          this.messages=this.messageService.getMqttdata();
          console.log("updating Sensors sources")
        },5000);
    }
    

    【讨论】:

    • 我的服务是在父组件提供程序中定义的,所以我是否应该将数据放入父组件,然后将父组件的相关属性绑定到我想在更改时触发的属性?如果我是对的,你能告诉我怎么做吗?
    • 如果这解决了您的查询,请考虑将其标记为解决方案。
    猜你喜欢
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 2023-04-08
    • 2017-11-22
    • 2012-06-03
    • 2019-11-07
    • 2018-09-01
    • 2018-12-03
    相关资源
    最近更新 更多