ngOnChanges не запускается

Привет, я новичок в 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 (), поэтому он должен запускать ngOnChanges каждые 5 секунд? что мне не хватает?


person FrozzenFinger    schedule 23.08.2018    source источник


Ответы (1)


@Input свойства должны передаваться родительским элементом этого компонента. Он не должен быть получен от службы прямо внутри этого компонента.

В этом случае вызов службы должен находиться в родительском компоненте, который использует этот компонент.

Итак, если у вас есть компонент (скажем, с selector: app-home), то внутри шаблона app-home вы будете использовать app-sensor-list и передадите messages оттуда.

Что-то вроде этого:

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

Снова внутри класса TypeScript компонента app-home вы сделаете вызов службы:

ngOnInit() {
    setInterval(()=>{
      this.messages=this.messageService.getMqttdata();
      console.log("updating Sensors sources")
    },5000);
}
person SiddAjmera    schedule 23.08.2018
comment
моя служба определена в поставщиках родительских компонентов, поэтому должен ли я получить данные в родительский компонент, а затем привязать связанный атрибут родительского элемента к тому, который я хочу активировать при изменениях? если я прав, вы можете показать мне, как это сделать? - person FrozzenFinger; 23.08.2018
comment
Подумайте о том, чтобы пометить его как решение, если оно решило ваш запрос. - person SiddAjmera; 23.08.2018