对象在应该定义它的 OnInit 之后保持未定义状态

问题描述 投票:0回答:1

我有一个包含大量对象的父组件:

export const myWalls: MyWall[] = [
  {
    sign: 'COTTON CANDY',
    photo1: 'assets\\walls.jpg',
    photo2: 'assets\\1.jpg',
    photo3: 'assets\\2.jpg',
    id:1,
    mySong: [
      {
        name: 'firstsong',
        cover: 'assets\\1.jpg',
        song: 'assets\\audio\\11.mp3',
      },
      {
        name: 'secondsong',
        cover: 'assets\\1.jpg',
        song: 'assets\\audio\\12.mp3',
      },
    ]
  },
  {
    sign: 'NEON',
    photo1: 'assets\\3.jpg',
    photo2: 'assets\\4.jpg',
    photo3: 'assets\\5.jpg',
    id:1,
    mySong: [
      {
        name: 'thirdsong',
        cover: 'assets\\1.jpg',
        song: 'assets\\audio\\11.mp3',
      },
      {
        name: 'fourthsong',
        cover: 'assets\\1.jpg',
        song: 'assets\\audio\\11.mp3',
      },
    ]
  }
]

每个对象都通过其 id 字段连接到特定的路由。通过获取这个 id,我应该获得对象的其余属性。为此,我在子组件中有一个构造函数。但即使在初始化之后,对象仍然未定义,并且它会破坏接下来的一切。谁能告诉我可能是什么问题吗?

export class FirstInComponent{
  public object?: MyWall;
  constructor(private route: ActivatedRoute) {
    this.route.params.subscribe((params: Params) => {
      this.object = myWalls[params['id']-1];
      console.log(typeof this.object)
    })
  }

我尝试使用 OnInit 而不是构造函数,但没有任何变化

public object?: MyWall;
  constructor(private route: ActivatedRoute) {}

  ngOnInit(): void {
    this.route.params.subscribe((params: Params) => {
      this.object = myWalls[params['id']-1];
      console.log(typeof this.object)
    })
  }
angular routes binding
1个回答
0
投票

我认为

id
字段存储为字符串。您需要使用
id
number
 转换为 
+

  public object?: MyWall;
  constructor(private route: ActivatedRoute) {}

  ngOnInit(): void {
    this.route.params.subscribe((params: Params) => {
      const id: number = +(params?.['id'] || 0);
      this.object = myWalls[id - 1];
      console.log(typeof this.object)
    })
  }

console.log(1+1);

console.log('1'+1);

© www.soinside.com 2019 - 2024. All rights reserved.