You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中如何在ngOnInit内部函数向外部数组添加元素?

解决Angular组件中数组push失败的问题

嘿,我来帮你搞定这个问题!你的代码里有两个关键问题导致this.numbers.push没生效,咱们一个个说清楚:

问题1:普通函数的this指向错误

你在ngOnInit里定义的loadImages是个普通函数,它内部的this并不指向你的MyphotographsComponent组件实例,所以自然找不到this.numbers这个数组。

问题2:push的语法错误

push是数组的方法,必须用括号调用(push(1)),而不是用方括号(push[1]),后者是完全错误的语法哦。


推荐的解决方案

方案1:使用箭头函数(最简洁推荐)

箭头函数不会绑定自己的this,它会继承外层上下文的this(也就是组件实例),这样就能正确访问this.numbers了:

export class MyphotographsComponent implements OnInit { 
  numbers = []; 

  ngOnInit() { 
    const loadImages = () => { 
      this.numbers.push(1); // 现在this指向组件实例,语法也正确
    } 
    loadImages(); 
  } 
}

方案2:提前保存组件的this到变量

如果一定要用普通函数,可以先把组件实例的this存到一个变量里,比如that,然后在函数里用这个变量访问数组:

export class MyphotographsComponent implements OnInit { 
  numbers = []; 

  ngOnInit() { 
    const that = this; // 保存组件的this
    function loadImages() { 
      that.numbers.push(1); // 用that代替this访问数组
    } 
    loadImages(); 
  } 
}

方案3:把loadImages改成组件的类方法

把函数定义成组件的类成员方法,这样方法里的this默认就指向组件实例:

export class MyphotographsComponent implements OnInit { 
  numbers = []; 

  ngOnInit() { 
    this.loadImages(); // 调用类方法
  } 

  loadImages() { 
    this.numbers.push(1); 
  } 
}

任选一种方案修改后,你的数组就能正常添加元素啦!

内容的提问来源于stack exchange,提问作者naram kiran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:47:46