【问题标题】:How to retrieve data from database using Vue如何使用Vue从数据库中检索数据
【发布时间】:2019-05-30 08:17:20
【问题描述】:

已解决 不知何故,正如用户评论的那样,将模板从网页移动到 vue 脚本中解决了这个问题。我不完全确定为什么。 Here 是一个工作小提琴,也适用于我的设置。

原始问题 我有一些 Laravel 经验,但对使用 Vue 还是很陌生。我想 要有一个显示数据库中某些值的页面,当添加或删除一个值时,我希望页面自动更新而无需重新加载。 我相信这正是您使用 Vue 的目的。

我正在运行 Laravel 5.7.16 并使用 npm install 安装了 vue 2.5.21 和 vue-resource 1.5.1。该数据库在 MariaDB 10.1.35 上运行。

到目前为止,我正在尝试从 vue 发出一个 http GET 请求,GET url 设置了一个 web 路由,对于这个路由,我将创建一个从数据库中检索数据的函数。但是,我似乎无法让 http 请求正常工作。

这些是我的文件:

webpage.blade.php

@extends('layouts.app')

@section('content')
    <div id="app" class="container">
        <p>@{{ test }}</p>
    </div>

    <script src="{{ asset('js/vue.min.js') }}"></script>
    <script src="{{ asset('js/vue-resource.min.js') }}"></script>
    <script src="{{ asset('js/script.js') }}"></script>
@endsection

我在网上找到的一些资源使用 script 标签加载到 vue 中,其他使用 .js 文件中的“require”。对我来说,这正在工作,但我不确定这是否是最好的方法。

script.js

var vue = new Vue({
el: '#app',

data: {
    test: 'old data',
},

mounted: function() {

    var url = "/test";

    this.$http.get(url).then(response => {

        // get body data
        this.test= response.body;
        return this.test;

    });

}
});

routes/web.php

Route::get('/test', function()
{
    return 'new data';
});

上面的代码似乎总是在我希望它显示“新数据”的地方显示“旧数据”。我在 vue 文档的某处读到 Vue 2.x 中已弃用“就绪”,而我应该改用“已安装”。但是,加载页面时似乎没有运行此功能。

谁能给出一个 Vue 发出 http GET 请求以检索某些值并将该值显示在网页上的清晰示例?一旦我可以让它工作,我会担心它会自动更新。

【问题讨论】:

  • 您确定/test 路由工作正常吗?您的this.$http.get 没有错误处理程序,因此请检查浏览器的网络选项卡,看看它是否由于某种原因而失败。
  • 好主意,但是 console.log 显示“新数据”,所以我的 /test 路由正在运行
  • this.test = 'foo' 在您的 mounted() 函数中是否有效?
  • 非常有趣,似乎@ceejayoz 的建议在网页上显示了“foo”。 http请求可能是异步处理的。并在 http 调用完成之前显示该值。关于如何实现这一点的任何建议?
  • @Boray 你能试试this fiddle吗?请注意,该模板已移至 Vue 组件本身。

标签: javascript laravel vue.js


【解决方案1】:

发出 HTTP 请求后,您需要将 test 的值设置为响应。例如:

var vue = new Vue({
    el: '#app',

    data: {
        test: 'old data',
    },

    mounted: function() {

        var url = "/test";

        this.$http.get(url).then(response => {
            this.test = response.body; 
        });

    }
});

【讨论】:

  • 感谢您的回答。我试过你的方法,但结果还是一样。我怀疑安装的函数可能会在使用 vue 显示 data.test 后运行,因为网页显示“旧数据”,但我的 console.log 正在记录“新数据”
  • this.test 不会根据您编辑的答案起作用,因为它将与闭包的范围相关联。这就是我使用 self 的原因。
  • 我会将其编辑到我的问题中,但即使使用“self”,测试值似乎也会在 http 请求完成之前显示
  • 请求完成后你看到new data了吗?另外,只想问一下,#app 容器是在哪里添加的?在您的主布局中?
  • @Mozammil 我的理解是=&gt; 应该已经解决了范围问题。 medium.freecodecamp.org/…
猜你喜欢
  • 2021-12-31
  • 2020-08-03
  • 1970-01-01
  • 2018-09-04
  • 2019-05-10
  • 2015-08-04
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多