未定义赋值(当赋值的右侧具有值时)

时间:2018-12-09 20:20:21

标签: javascript angular typescript

我有一个角组件,它消耗ngOnInit函数上的服务。当我从服务中调用方法时,它返回一个元素数组并将其分配给一个t变量,我确认它正在返回该数组,但是我使用了t变量并将其分配给一个类型变量,但赋值后,该类型变量保留未定义的值。

组件:

export class HeroesFilteredComponent implements OnInit {

  private heroes:Heroe[];
  private termino:string;

  constructor(
    private _heroesService:HeroesService, 
    private _activatedRoute:ActivatedRoute
  ) { }

  ngOnInit() {
    this._activatedRoute.params.subscribe(params =>{
      let t =  this._heroesService.searchHeroes(params['g']);
      this.heroes = t;
    });
    console.log(this.heroes.length);
  }

}

服务:

 @Injectable()
    export class HeroesService {

    private heroes:Heroe[] = [{...},...,{...}]

    searchHeroes(termino:string):Heroe[]{
      termino = termino.toLowerCase();
      return this.heroes;
    }
}

界面:

export interface Heroe{
    nombre:string;
    bio:string;
    img:string;
    aparicion:string;
    casa:string;
    index?:number;
}

当我检查t时,它具有价值。

为什么这种奇怪的行为?

1 个答案:

答案 0 :(得分:3)

console.log(this.heroes.length);写入subscribeHeroesFilteredComponent块之外。这就是它来时未定义的原因。

将其移动到subscribe块中,它应该显示正确的值。

export class HeroesFilteredComponent implements OnInit {

  private heroes: Heroe[];
  private termino: string;

  constructor(
    private _heroesService: HeroesService,
    private _activatedRoute: ActivatedRoute
  ) {}

  ngOnInit() {
    this._activatedRoute.params.subscribe(params => {
      let t = this._heroesService.searchHeroes(params['g']);
      this.heroes = t;
      console.log(this.heroes.length);
    });
  }

}