不会触发Vue js Ready功能

时间:2016-10-24 01:07:26

标签: javascript jquery ajax vue.js

我有这个vue函数,其中基本上有两种方法。第一个postStatus用于在用户单击保存按钮后保存帖子,而另一个getPosts用于从数据库中检索该用户的所有先前帖子。

这是vue.js,其中有一个对控制器的ajax调用(在Laravel 5.3中)

$(document).ready(function () {

    var csrf_token = $('meta[name="csrf-token"]').attr('content');
    /*Event handling within vue*/
    //when we actually submit the form, we want to catch the action
    new Vue({
        el      : '#timeline',
        data    :   {
            post    : '',
            posts   : [],
            token   : csrf_token,
            limit   : 20,
        },
        methods : {
            postStatus : function (e) {
                e.preventDefault();
                //console.log('Posted: '+this.post+ '. Token: '+this.token);
                var request = $.ajax({
                    url         :   '/posts',
                    method      :   "POST",
                    dataType    :   'json',
                    data        :   {
                        'body'  :   this.post,
                        '_token':   this.token,
                    }
                }).done(function (data) {
                    //console.log('Data saved successfully. Response: '+data);
                    this.post = '';
                    this.posts.unshift(data); //Push it to the top of the array and pass the data that we get back
                }.bind(this));/*http://stackoverflow.com/a/26479602/1883256  and  http://stackoverflow.com/a/39945594/1883256 */

                /*request.done(function( msg ) {
                    console.log('The tweet has been saved: '+msg+'. Outside ...');
                    //$( "#log" ).html( msg );
                });*/

                request.fail(function( jqXHR, textStatus ) {
                    console.log( "Request failed: " + textStatus );
                });
            },
            getPosts : function () {
                //Ajax request to retrieve all posts
                $.ajax({
                    url         :   '/posts',
                    method      :   "GET",
                    dataType    :   'json',
                    data        :   {
                        limit   :   this.limit,
                    }

                }).done(function (data) {
                    this.posts = data.posts;
                }.bind(this));

            }
        },
        //the following will be run when everything is booted up
        ready : function () {
            console.log('Attempting to get the previous posts ...');
            this.getPosts();
        }
    });

});

到目前为止,第一种方法postStatus工作正常。

第二个应该在就绪函数中调用或触发,但是没有任何反应。我甚至没有得到console.log消息Attempting to get the previous posts ...。它似乎永远不会被解雇。

问题是什么?我该如何解决?

注意:我使用的是jQuery 3.1.1,Vue.js 2.0.1

2 个答案:

答案 0 :(得分:48)

我看到你正在使用Vue 2.0.1。 Vue 2.0及更高版本中没有ready方法。

以下是所有Vue 2.0更改列表的链接:https://github.com/vuejs/vue/issues/2873

如上页所述,您可以使用mounted代替ready

不是问题,只是一个注意事项:你正在广泛地混合使用jQuery和Vue。如果您只需要jQuery用于http相关功能,您可以使用vue-resource - https://github.com/vuejs/vue-resource

编辑:vue-resource上的更新

正如@EmileBergeron在评论中指出的那样,vue-resource在2016年11月就已经退休了(我在vue-resource上的最后一段提供了这个答案后几周)。以下是更多信息:

https://medium.com/the-vue-point/retiring-vue-resource-871a82880af4

答案 1 :(得分:9)

@Mani建议使用mounted(){}对未隐藏的组件起作用。如果您希望在可见时在组件中运行某个功能,并使用v-if=""v-show=""等条件隐藏该功能,请使用updated(){}