axios get请求数据成功后怎样动态赋值

我想在axios取到数据后赋值给this.datas.lists。如果直接写this.datas.lists = res.data是没有问题的,但是我把this.datas.lists当参数传进来就无论如何都赋值不成功,请求是成功的,请问是为什么?谢谢
图片描述

如图所示,这样请求数据是没问题的但是将数据赋值给message这个参数,this.datas.lists仍然是空的。

阅读 14.8k
5 个回答

1.解决方法

使用push()方法,就可以了:

getDate(link,message) {
  this.$http.get(url).then(res=> {
      this.datas.lists .push(res.data);
  })
}

2.问题理解

目测你的参数this.datas.lists应该是数组类型 [ ],数组类型属于引用类型,传参的时候属于引用传递。我感觉你应该在问:我既然用的是引用传递,message就是指向this.datas.lists,那为什么this.datas.lists值仍然是空呢?

3.原因

你使用的是message = res.data,实际上是是将message赋予了res.data对象的引用,即重新分配了内存地址,message自然不再指向this.datas.lists。所以不能改变this.datas.lists的值。

4.数组类型和引用类型

  1. 基本类型: string,number,boolean,null,undefined
  2. 引用类型: Function,Array,Object
    (通常 [ ]来定义的数组是属于Array)可以通过 instanceof 来判断

      var arr=[];
      console.log(arr instanceof Array); //结果为true

5.建议

建议还是直接使用 this.datas.lists来操作数据就可以了,简单快捷啊 ,有木有。

js的函数参数传递为值传递。

当传入的是 基本类型的参数时:就是复制了份内容给i而已,i与age之间没有关系。

function setAge(i)

{

alert(i);//24
i = 18;
alert(i);//18,i的改变不会影响外面的age

};

var age = 24;
setAge(age);
alert(age);//24
当传入的参数为引用类型时:

function setName(obj)

{

obj.name = 'haha';

};

var obj2 = new Object();
setName(obj2);
alert(obj2.name); // haha

这看起来很像是传递的是引用,因为obj.name受到改变了,但其实不是,其实还是值,因为obj2本身的值就是新对象的地址,所以传进去的就是这个地址。
你可以参考下!!!!!!!!!!!!!!!!!

大哥 你不能把this.data.lists当做参数传递进去呀~~~
你应该这么写

getDate(link) {
  this.$http.get(url).then(res=> {
      this.datas.lists = res.data 
  })
}

@乾隆 说的是对的,
你传的实际上还是一个“值”,而不是引用。

但你可以试一下传:this.datas,然后函数体内这样赋值:

this.datas.lists=res.data;

新手上路,请多包涵

新建一个vue调用方法就可以把值传出去了图片描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题