【问题标题】:data received from laravel controller not updating to vue variable从 laravel 控制器接收的数据未更新为 vue 变量
【发布时间】:2019-05-19 14:19:10
【问题描述】:

我正在使用 laravel 和 vue 创建一个具有仪表板的 Web 应用程序。 当我将数据从控制器传递到 vue 文件时,数据被正确接收,但是当我将其设置为 vue 变量时,该值未在变量中设置。接收到所有数据并将其显示在控制台中,但是当我将其设置为 vue 变量时,该变量不会更新其值。 这是我的控制器类:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;
class UsersController extends Controller
{
    //
    public function index()
    {
        $users=User::all();

        return response()->json($users);
    }
}

这是用于接收和显示数据的 myTeam.vue:

<template>
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card card-default">
                    <div class="card-header">Example Component</div>


                    <h1>
                       This request list
                       Hello,{{this.items}}
                    </h1>

                    <ul class="list-group">
                        <li class="list-group-item" v-for="t in items">{{items}}</li>

                    </ul>

                      </div>
                </div>
            </div>
        </div>
</template>

<script>
    export default {
        data(){
            return {
                 //items: []
                 items:[],

            }
        },

        created() {
            var self=this;
             axios.get('/allusers').then((response) => self.items=response.data) .catch((error)=>console.log(error));

             axios.get('/allusers') .then(response => console.log(response.data));

            console.log('Component mounted.'+this.items)
        },


    }
</script>

现在,当我运行它时,控制台会正确打印数组,这意味着数据已收到,但当我将其设置为 items 变量时,数据未设置。

我的输出是这样的: This is the output image file

请检查并提前感谢...

【问题讨论】:

  • 你试过 {{this.items[0]}} 吗?如果显示第 [0] 行,则表示元素中无法显示 2 行或更多行。
  • 你把console.log('Component mounted.'+this.items)放在回调里面,因为ajax是异步的,或者你可以使用promises
  • 用作Hello,{{items}} 无需使用this 访问数据属性。
  • 还是不行

标签: php laravel vue.js axios


【解决方案1】:

这永远不是打印项目数组,因为它在 ajax 响应被填充之前执行。

    console.log('Component mounted.'+this.items)

这就是为什么您的控制台总是空白的原因。可以搜索blocking and non blocking编程。

您的代码有小错误。更新您的代码并尝试以下操作:

<h1>
 This request list
    Hello,{{items}}
</h1>

<ul class="list-group">
    <li class="list-group-item" v-for="t in items">{{t}}</li>
</ul>
...

<script>
    export default {
        data(){
            return {
                items:[],
            }
        },
        mounted: function () {
            this.getList();
        }

        methods: {
            let _this = this;
            axios.get('/allusers')
            .then((response) => _this.items = response.data) 
            .catch((error)=>console.log(error));
        },
    }
</script>

This can帮你。祝你好运。

【讨论】:

  • 我已经尝试过了,但变量仍然没有用接收到的值进行更新。问题是 vue 变量中的值没有更新
  • 感谢@Gautam Patadiya,但仍然存在同样的问题,因为值没有更新,所以没有显示任何内容。我尝试了不同的方法,但 vue 变量仍然没有更新。当我使用 axios 更新变量时会发生这种情况。除了axios,还有其他方法可以做这样的事情吗?我不知道为什么从 axios 更新会导致问题
  • 感谢@Gautam Patadiya,但变量值仍然没有更新。
  • @Osama 可能是缓存中的屏幕我用示例创建了新的 jsbin,代码运行良好。
  • 感谢@Gautam Patadiya。问题已经解决了。您使用 ul 打印值的代码很有帮助。我做的另一个步骤是使用 npm 命令重新安装 axios。这两个步骤都解决了我的问题。谢谢。要重新安装 axios,请参阅此链接 npmjs.com/package/vue-axios
猜你喜欢
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
  • 2021-04-02
  • 1970-01-01
相关资源
最近更新 更多