首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于nextTick的Vue 2

关于nextTick的Vue 2
EN

Stack Overflow用户
提问于 2017-02-10 06:35:11
回答 1查看 12.7K关注 0票数 4

我读过nextTick允许在下一个操作时执行代码。但这在我的代码中行不通,有人能在这方面帮助我吗?请纠正我。谢谢。

.vue

代码语言:javascript
运行
复制
.....
methods:{
      getUserInfo(){
        var vm = this
        vm.$http.get('/getAuthUser').then((response)=>{
          vm.user = response.data
        })
        Vue.nextTick(()=>{
          vm.$http.get('/getShop/'+vm.user.id).then((response)=>{
            vm.shop = response.data.data.shop
          })
        })
      },
}
.....

{{user.id}}确实能工作。这将给出以下错误:

获取http://localhost:8000/getShop/undefined 404 (未找到)

EDIT#1,如果我这样做,它会工作,但这不应该是正确的方式,在我看来。

代码语言:javascript
运行
复制
.....
methods:{
      getUserInfo(){
        var vm = this
        vm.$http.get('/getAuthUser').then((response)=>{
          vm.user = response.data
          vm.$http.get('/getShop/'+vm.user.id).then((response)=>{
            vm.shop = response.data.data.shop
          })
        })
      },
}
.....

EDIT#2,如果我这样做,它是行不通的,因为vm.user.id还没有设置好。

代码语言:javascript
运行
复制
.....
methods:{
      getUserInfo(){
        var vm = this
        vm.$http.get('/getAuthUser').then((response)=>{
          vm.user = response.data
        })
        vm.$http.get('/getShop/'+vm.user.id).then((response)=>{
          vm.shop = response.data.data.shop
        })
      },
}
.....
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-15 05:16:17

我认为你对nextTick做什么的理解是不正确的。如果读取文档,它将在下一次DOM更新之后执行传递给nextTick函数的回调。

假设您有一个属性,该属性使用v-if指令确定元素是否存在于DOM中。例如,如果您更改了属性的值,以便元素存在于DOM中,您可能必须等待Vue处理更改并更新DOM,然后才能获取该元素的引用。在这种情况下,您应该使用Vue.nextTick来确保在您想要查询DOM以获得该元素时,它确实存在。

您的场景与DOM没有任何关系。

您有两个异步HTTP调用,希望一个接一个地执行,因为第二个调用依赖于第一个调用的结果。您最初的实现和第三个(EDIT#2)实现都是零碎的,因为在触发第二个请求之前,没有确保第一个HTTP请求已经完成,这就解释了为什么没有设置vm.user.id时会出现错误。

您的第二个实现(EDIT#1)更正确,因为第二个HTTP请求是在第一个请求完成后触发的。不过,我还是建议做个小小的修改:

代码语言:javascript
运行
复制
getUserInfo() {
    vm.$http.get('/getAuthUser')
        .then(response => {
            vm.user = response.data;

            return vm.$http.get('/getShop/' + vm.user.id);
        }).then(response => {
            vm.shop = response.data.data.shop;
        });
}

第一个回调返回一个Promise,结果被输入到第二个then调用中。我喜欢这种方法,因为它避免了嵌套的then,我也建议你阅读MDN承诺文档

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42152937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档