1

您好,我是 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 吗?我错过了什么?

4

1 回答 1

2

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

如果是这种情况,则此服务调用应驻留在使用此组件的父组件中。

因此,如果您有一个组件(例如使用selector: app-home),那么在 的模板中app-home,您将使用app-sensor-listmessages从那里传递。

类似这样的东西:

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

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

ngOnInit() {
    setInterval(()=>{
      this.messages=this.messageService.getMqttdata();
      console.log("updating Sensors sources")
    },5000);
}
于 2018-08-23T19:28:26.247 回答