我有这个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
答案 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(){}
。