Javascript Vue js就绪功能未触发
我有一个vue函数,基本上有两种方法。第一个Javascript Vue js就绪功能未触发,javascript,jquery,ajax,vue.js,Javascript,Jquery,Ajax,Vue.js,我有一个vue函数,基本上有两种方法。第一个postStatus用于在用户单击保存按钮后保存帖子,另一个getPosts用于从数据库检索该用户以前的所有帖子 这里是vue.js,其中有一个对控制器的ajax调用(在Laravel 5.3中) 到目前为止,第一种方法postStatus运行良好 第二个应该在ready函数中调用或激发,但是,什么也没有发生。我甚至没有收到console.log消息试图获取以前的帖子…。似乎它从未被解雇过 问题是什么?我怎么修理它 注意:我使用的是jQuery 3.1
postStatus
用于在用户单击保存按钮后保存帖子,另一个getPosts
用于从数据库检索该用户以前的所有帖子
这里是vue.js,其中有一个对控制器的ajax调用(在Laravel 5.3中)
到目前为止,第一种方法postStatus
运行良好
第二个应该在ready函数中调用或激发,但是,什么也没有发生。我甚至没有收到console.log消息试图获取以前的帖子…
。似乎它从未被解雇过
问题是什么?我怎么修理它
注意:我使用的是jQuery 3.1.1、Vue.js 2.0.1我看到您使用的是Vue 2.0.1。Vue 2.0及更高版本中没有
ready
方法
以下是指向所有Vue 2.0更改列表的链接:
如上页所述,您可以使用mounted
而不是ready
这不是一个问题,只是一个注意事项:您正在广泛地混合jQuery和Vue。如果您只需要jQuery用于与http相关的函数,则可以改用vue资源
-
编辑:更新vue资源
正如@EmileBergeron在评论中指出的,vue资源早在2016年11月就已经退役了(在我用vue资源
的最后一段提供了这个答案的几周之后)。以下是关于同一问题的更多信息:
@Mani建议在未隐藏的组件上使用
mounted(){}
。如果您想在组件中运行一个可见的函数,并使用诸如v-If=“”
或v-show=“”
之类的条件隐藏元素,那么请使用updated(){}
是的,这就成功了!感谢您的附加说明和有用的链接:)感谢@EmileBergeron指出这一点。是的,Vue.js
开发人员圈中的所有人都知道这一变化,并且已经适应了这一变化,但是我很长时间都忘记了这个特定的答案。我对答案进行了编辑,添加了其他注释,这样未来的读者就不必花时间自己去发现这一点。再次感谢@谢谢你提供的信息丰富的答案。然而,我必须提出一个批评:如果vue资源
或axios
或任何东西
真的比$.ajax()
好得多,那么我们为什么不疯狂地蜂拥而来呢?别再告诉人们怎么玩滑板了。用反jQuery的花言巧语来阻止它$.ajax()
是一种经过多年战斗考验的坦克,有望成为一种实用数十年的方法。vue资源
能说同样的话吗?请记住,现在进入太空的唯一途径是乘坐联盟号
@Mani。谢谢你深思熟虑的、内容丰富的回复。关于$.ajax()
作为一个独立的库,您提出了一个非常好的观点。我不同意对85kb的担心。即使是在最差的网络上,这也不过是小菜一碟,相比之下,互联网上99.999%的网站都是小菜一碟。然而,作为一个高端设备的公认拥有者,你给了我一些新的东西来调查,这只能带来新的更好的技术。谢谢你的思考!事实上,当页面加载时,mounted也可以工作。假设您进行刷新,则会触发已装入的段。然而,更新了。虽然我似乎需要声明这两个方面才能起作用。我的特定vue文件作为通用主锅炉板的一部分加载,并适用于loggedIn/未登录用户,因此navbar.vue
-当未触发已安装段中的用户登录时,或者我应该说内部检查未运行,但使用更新的方法时-这是它在登录后调用的块
$(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();
}
});
});