首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“‘vm”对象位于Vue实例外部并在方法内部调用,但未定义

“‘vm”对象位于Vue实例外部并在方法内部调用,但未定义
EN

Stack Overflow用户
提问于 2017-06-28 06:16:51
回答 1查看 781关注 0票数 0

当一个函数在vue实例外使用并在方法mounted内传递时,为什么对'vm‘的引用丢失了?

https://jsfiddle.net/z9u39hgu/5/

代码语言:javascript
复制
var vm = new Vue({
    el: '#app-4',
    data: {
        isLoading: true
    },
    mounted: function() {
        hello();
    }
});


function hello() {
    console.log(JSON.stringify(vm));
    //vm.isLoading = true;
    setTimeout(function() {
        console.log(JSON.stringify(vm, replacer));
        //vm.isLoading = false;
    })
}

//Extra code ignore
seen = []; 

var replacer = function(key, value) {

if (value != null && typeof value == "object") {
    if (seen.indexOf(value) >= 0) {
        return;
    }
    seen.push(value);
}
return value;

};
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.4/vue.js"></script>
<div id="app-4">
    <p v-if="isLoading">Vuejs loading...</p>
</div>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-28 16:02:37

似乎在vm变量被赋值之前,mounted()就是从Vue构造函数中触发的。因此,vm引用并没有丢失,但在调用hello()时,它仍然是未定义的。

timeout()构造函数已经返回并分配了vm变量时,Vue回调函数将在稍后调用。这些事件的时间顺序也可以在控制台中看到。

代码语言:javascript
复制
var vm = new Vue({
    el: '#app-4',
    data: {
        isLoading: true
    },
    mounted: function() {
        hello();
    }
});


function hello() {
    console.log("before timeout: " + typeof(vm));
    //vm.isLoading = true;
    setTimeout(function() {
        console.log("after timeout: " + typeof(vm));
        //vm.isLoading = false;
    })
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.4/vue.js"></script>
<div id="app-4">
    <p v-if="isLoading">Vuejs loading...</p>
</div>

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

https://stackoverflow.com/questions/44790810

复制
相关文章

相似问题

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