Vue.js .$mount()和el[Vue JS]之间的差异
这段代码之间的区别是什么:Vue.js .$mount()和el[Vue JS]之间的差异,vue.js,vuejs2,Vue.js,Vuejs2,这段代码之间的区别是什么: new Vue({ data () { return { text: 'Hello, World' }; } }).$mount('#app') 还有这个: new Vue({ el: '#app', data () { return { text: 'Hello, World' }; } }) 我的意思是,使用$
new Vue({
data () {
return {
text: 'Hello, World'
};
}
}).$mount('#app')
还有这个:
new Vue({
el: '#app',
data () {
return {
text: 'Hello, World'
};
}
})
我的意思是,使用
$mount()
而不是el
或反之有什么好处?$mount
允许您在需要时显式装载Vue实例。这意味着您可以延迟装入vue
实例,直到页面中存在特定元素或某个异步进程完成,这在将vue添加到将元素注入DOM的传统应用程序时特别有用,我在测试中也经常使用这一点()当我希望在多个测试中使用同一个vue实例时:
// Create the vue instance but don't mount it
const vm = new Vue({
template: '<div>I\'m mounted</div>',
created(){
console.log('Created');
},
mounted(){
console.log('Mounted');
}
});
// Some async task that creates a new element on the page which we can mount our instance to.
setTimeout(() => {
// Inject Div into DOM
var div = document.createElement('div');
div.id = 'async-div';
document.body.appendChild(div);
vm.$mount('#async-div');
},1000)
//创建vue实例,但不要装载它
const vm=新的Vue({
模板:“我已安装”,
创建(){
console.log('Created');
},
安装的(){
console.log('Mounted');
}
});
//一些异步任务,它在页面上创建一个新元素,我们可以将实例装载到其中。
设置超时(()=>{
//将Div注入DOM
var div=document.createElement('div');
div.id='async div';
文件.正文.附件(div);
vm.$mount('async div');
},1000)
这里是JSFiddle:在您提供的示例中,我不认为有什么区别或好处。然而,在其他情况下可能会有好处。(我从未遇到过以下情况)
$mount()
您可以更灵活地选择它将是什么元素
如果有必要的话,安装在上面vm.$mount()
if(document.getElementById('some-element') != null){
// perform mount here
}
根据上的Vue.js API文档,这两个模型在功能上是相同的,只是
$mount
可以(可选)在不使用元素选择器的情况下调用,这会导致Vue模型与文档分开呈现(因此可以稍后追加)。此示例来自以下文档:
var MyComponent = Vue.extend({
template: '<div>Hello!</div>'
})
// create and mount to #app (will replace #app)
new MyComponent().$mount('#app')
// the above is the same as:
new MyComponent({ el: '#app' })
// or, render off-document and append afterwards:
var component = new MyComponent().$mount()
document.getElementById('app').appendChild(component.$el)
var MyComponent=Vue.extend({
模板:“你好!”
})
//创建并装载到#应用程序(将替换#应用程序)
新的MyComponent().$mount(“#app”)
//以上内容同:
新的MyComponent({el:'#app'})
//或者,渲染文档并随后追加:
var component=new MyComponent().$mount()
document.getElementById('app').appendChild(组件$el)
最上面的答案已经足够好了。我只是在这里留言,因为我没有足够的声望。Alternativley:
setTimeout(() => {
const element = document.createElement('div');
document.body.appendChild(element);
vm.$mount(element);
}, 0)
如果将vue子类(vue.extend)与el一起使用,则您将进入控制台:[vue warn]:选项“el”只能在实例创建过程中使用
new
关键字$挂载不显示此警告。这正是我所寻找的不替换挂载元素,谢谢!