Laravel 5 VueJS&;拉威尔5.3

Laravel 5 VueJS&;拉威尔5.3,laravel-5,vue.js,vue-resource,Laravel 5,Vue.js,Vue Resource,Laravel 5.3+Vue JS+ 我正在尝试通过获取数据(使用ajax)来实现简单的foreach循环 我的vuejs脚本文件: var vm = new Vue({ el:'#posts-app', methods: { fetchPosts: function(){ this.$http.get('/api/fetchPosts',function(data){ this.$set('allposts',data); }

Laravel 5.3+Vue JS+

我正在尝试通过获取数据(使用ajax)来实现简单的foreach循环

我的vuejs脚本文件:

var vm = new Vue({
el:'#posts-app',

methods: {
    fetchPosts: function(){
        this.$http.get('/api/fetchPosts',function(data){
            this.$set('allposts',data);
        });
    }
},

ready: function(){
    this.fetchPosts();
    console.log(this.allposts);
}});
拉威尔控制器:

Route::get('api/fetchPosts', function(){
return App\Post::all();});
刀片模板:

<div id="posts-app">

    <div class="container">

        <div class="row">

            <div class="col-md-12">

                <h1>Posts</h1>
                <hr />

                <table class="table table-hover">
                    <thead>
                        <tr>
                            <td>ID</td>
                            <td>Posted</td>
                            <td>Title</td>
                            <td>Author</td>
                        </tr>
                    </thead>

                    <tbody>

                        <tr v-for="post in allposts">
                            <td>@{{ post.id }}</td>
                            <td>@{{ post.id }}</td>
                            <td>@{{ post.id }}</td>
                            <td>@{{ post.id }}</td>
                        </tr>

                    </tbody>

                </table>

            </div>

        </div>

    </div>

</div>
我得到一个空页面,但我有一个ajax响应,其中包含来自数据库的所有帖子的有效返回代码。我做错了什么?
谢谢

您的vue资源调用似乎不正确。当前版本返回一个承诺,第一个函数是成功回调。由于您没有提到正在使用的vue和vue资源的版本,因此我参考了CDN版本

一份有效的推荐信是

<html>
<body>
<div id="posts-app">
    <ul>
        <li v-for="post in posts">{{post.title}}</li>
    </ul>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.26/vue.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-resource/1.0.1/vue-resource.min.js"></script>
<script>
var vm = new Vue({
    el:'#posts-app',
    methods: {
        fetchPosts: function () {
            this.$http.get('/api/fetchPosts').then(function (response) {
                this.$set('posts', response.body);
                // or 
                // this.$set('posts', response.data);
            });
        }
    },

    ready: function () {
        this.fetchPosts();
    }
});
</script>
</body>
</html>

看起来您的vue资源调用不正确。当前版本返回一个承诺,第一个函数是成功回调。由于您没有提到正在使用的vue和vue资源的版本,因此我参考了CDN版本

一份有效的推荐信是

<html>
<body>
<div id="posts-app">
    <ul>
        <li v-for="post in posts">{{post.title}}</li>
    </ul>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.26/vue.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-resource/1.0.1/vue-resource.min.js"></script>
<script>
var vm = new Vue({
    el:'#posts-app',
    methods: {
        fetchPosts: function () {
            this.$http.get('/api/fetchPosts').then(function (response) {
                this.$set('posts', response.body);
                // or 
                // this.$set('posts', response.data);
            });
        }
    },

    ready: function () {
        this.fetchPosts();
    }
});
</script>
</body>
</html>

嗯,我发现了问题所在


当我从blade template调用vue脚本时,它工作正常,但如果我从.js文件调用它,它就不工作了……

好吧,我发现了问题所在


当我从blade模板调用vue脚本时,它工作正常,但如果我从.js文件调用它,它就不工作了。…

从laravel以json的形式返回数据,如下所示

Route::get('fetchPosts', function() {
    $data = [
        [
            'id' => 1,
            'title' => 'title one',
        ],
        [
            'id' => 2,
            'title' => 'title two',
        ]
    ];

    return response()->json($data);
});
并在数据对象中将帖子声明为空数组

<script>
    var vm = new Vue({

        el: '#posts-app',
        data: {
            posts: [],
        },
        methods: {
            fetchPosts: function() {
                this.$http.get('/api/fetchPosts').then(function(response) {
                    this.$set('posts', response.data);
                });
            }
        },

        ready: function() {
            this.fetchPosts();
        }
    });
</script>

var vm=新的Vue({
el:“#发布应用程序”,
数据:{
员额:[],
},
方法:{
fetchPosts:function(){
这是.http.get('/api/fetchPosts')。然后(函数(响应){
此.$set('posts',response.data);
});
}
},
就绪:函数(){
this.fetchPosts();
}
});

从laravel返回json格式的数据,如下所示

Route::get('fetchPosts', function() {
    $data = [
        [
            'id' => 1,
            'title' => 'title one',
        ],
        [
            'id' => 2,
            'title' => 'title two',
        ]
    ];

    return response()->json($data);
});
并在数据对象中将帖子声明为空数组

<script>
    var vm = new Vue({

        el: '#posts-app',
        data: {
            posts: [],
        },
        methods: {
            fetchPosts: function() {
                this.$http.get('/api/fetchPosts').then(function(response) {
                    this.$set('posts', response.data);
                });
            }
        },

        ready: function() {
            this.fetchPosts();
        }
    });
</script>

var vm=新的Vue({
el:“#发布应用程序”,
数据:{
员额:[],
},
方法:{
fetchPosts:function(){
这是.http.get('/api/fetchPosts')。然后(函数(响应){
此.$set('posts',response.data);
});
}
},
就绪:函数(){
this.fetchPosts();
}
});

我没有理解你所说的“如果我从.js文件调用它”的意思。您没有显示如何将视图块包含在刀片模板中。这就是为什么我将所有内容都包含在一个脚本中,这样您就可以看到各个部分是如何组合在一起的。我的意思是,如果我将脚本放在刀片模板中,它就可以工作,但如果我将脚本放在外部js文件中,并将其包含在html中,脚本就不能工作。我不理解您所说的“如果我从.js文件调用它”。您没有显示如何将视图块包含在刀片模板中。这就是为什么我将所有内容都包含在一个脚本中,这样您就可以看到各个部分是如何组合在一起的。我的意思是,如果我将脚本放在刀片模板中,它会工作,但如果我将脚本放在外部js文件中,并将其包含在html中,则脚本不会工作。