Laravel 提取时无法更新函数内的vue数据?
我是新来的VueJs。这是Laravel6.0,我对javascript中的变量作用域知之甚少,但我想我在这里遗漏了一些东西 当我在fetch外部编写“self.msg='hello world'”时,它工作正常 问题是: 即使在将“self.msg='hello world'”设置为inside.then()之后,它也不会在视图中得到反映。表示未更新“msg”变量Laravel 提取时无法更新函数内的vue数据?,laravel,vue.js,Laravel,Vue.js,我是新来的VueJs。这是Laravel6.0,我对javascript中的变量作用域知之甚少,但我想我在这里遗漏了一些东西 当我在fetch外部编写“self.msg='hello world'”时,它工作正常 问题是: 即使在将“self.msg='hello world'”设置为inside.then()之后,它也不会在视图中得到反映。表示未更新“msg”变量 <div class="main" > <div class="test"> {{ msg }}
<div class="main" >
<div class="test"> {{ msg }} </div>
<!-- output:test -->
</div>
这里的问题(很可能)是因为您在组件呈现之前调用了fetchWords()
函数,但没有告诉它在检索数据之后重新呈现。到那时,Vue还不知道您触发了“重画”。您有两个选择:
mounted()
()生命周期钩子,然后Vue.js一装载组件就会请求您的数据,然后它就会知道如何重置该数据点this.nextTick()
函数()强制Vue.js“重画”UI这仍然是一个猜测,但这就是我在处理HTTP和Vue.js生命周期挂钩时看到的情况。这里的问题是什么?如果您问为什么
self.msg
的值在末尾是'test'
,那是因为fetch
是异步的,所以行在然后回调之前运行。所有回调完成后,self.msg应为'hello world'
,这将触发模板重新运行以反映新值。是的,但最后新值应反映在视图模板中。顺便说一句,谢谢你的回复。你能不能编辑一下这个问题,让它清楚地说明问题是什么?现在还不清楚你在问什么。inside created()write this.msg='It works'并查看视图是否更新?@FidaHasan是的,如果我在created()内部或外部fetch调用(在fetchWords()方法中)中写入它,它会得到正确更新。
export default {
name:"word-list",
data() {
return {
msg: 'test'
}
},
created() {
this.fetchWords();
},
methods: {
fetchWords() {
let self = this;
console.log(self.msg);//output: test
fetch("getAllWords")
.then(res => res.json())
.then( res => {
console.log(self.msg);//output: test
self.msg = "hello world"
console.log(self.msg);//output: hello world
})
.catch((error) => console.log(error) );
console.log(self.msg);//output: test
}
}
}