Laravel 和 vue axios get 方法返回 Getters & Setters?

Posted

技术标签:

【中文标题】Laravel 和 vue axios get 方法返回 Getters & Setters?【英文标题】:Laravel & vue axios get method returns Getters & Setters? 【发布时间】:2019-01-21 23:36:35 【问题描述】:

我是 Vue.js 的新手,正在尝试使用 axios 从 Laravel API 获取数据。 后端的函数返回一个数组数组:

public function getPersonTypes()

    $data = [];
    $personTypes = config('codeechoo.documentation.config.personTypes');
    foreach ($personTypes as $id => $type) 
        $data[] = [
            'id' => $id,
            'name' => trans($type)
        ];
    

    return response()->json($data);

而方法中的Vue函数是:

fetchPersonTypes() 
           axios.get(route('api.documentation.person.types'))
                .then((response) => 
                    console.log(response.data);
                    this.personTypes = response.data;
                );
        

但控制台将结果显示为对象数组,例如:

id: Getter & Setter
name: Getter & Setter

那么我怎样才能得到 id, name props 的真实值呢?

【问题讨论】:

在你的 html 中,你可以使用 personTypes.id && personTypes.name 【参考方案1】:

您可以通过字符串化然后将其解析回来来提取数据:

let personTypes = JSON.parse(JSON.stringify(response.data));
console.log(personTypes);

您现在将在控制台中看到的是没有 getter 和 setter 的整个数据。

【讨论】:

谢谢。你知道它为什么会这样吗? 似乎在这里解释:vuejs.org/v2/guide/reactivity.html#How-Changes-Are-Tracked ```` 当您将纯 javascript 对象作为其数据选项传递给 Vue 实例时,Vue 将遍历其所有属性并将它们转换为 getter /setter 使用 Object.defineProperty。 ```【参考方案2】:

我认为你应该直接调用路由 url。 注意:因为在 axios 中已经设置了默认的 baseURL,所以你不需要输入 base url,只需要输入路径。 示例:不用axios.get(http://yoursite.com/you/path),只需输入axios.get('your/path')

fetchPersonTypes() 
    axios.get('your/path').then((data) => 
        console.log(data);
        this.personTypes = data;
    );

【讨论】:

他特意询问如何获取raw 数据,而不是Vue 设置的带有getter 和setter 的数据。

以上是关于Laravel 和 vue axios get 方法返回 Getters & Setters?的主要内容,如果未能解决你的问题,请参考以下文章

axios将参数传递给laravel路径

Laravel + Vue.js (axios) 使用网络路由 - 未经身份验证

axios 将参数传递给 laravel 路由

在 Laravel 护照、vueJS 和 Axios 中获得未经授权的 401

如何使用 Axios 使用经过身份验证的 API

Axios 中的 Cors OPTIONS 方法在 Laravel 和 Nginx 中失败