- $nextTick
理论上,我们应该不用去主动操作DOM,因为Vue的核心思想就是数据驱动DOM,但在很多业务里,我们避免不了会使用一些第三方库,比如propper.js、swiper等,这些基于原生JavaScript的库都有创建和更新及销毁的完整生命周期,与Vue配合使用时,就要利用好$nextTick。
<div id="app">
<div id="div" v-if="showDiv">这是一段文本</div>
<button @click="getText">获取div内容</button>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app = new Vue({
el: '#app',
data: {
showDiv: false
},
methods: {
getText: function() {
this.showDiv = true;
this.$nextTick(function() {
var text = document.getElementById('div').innerHTML;
console.log(text);
});
}
}
})
</script>
- X-Templates
在<script>标签里使用text/x-template类型,并且指定一个id,将这个id赋给template。
在<script>标签里,你可以愉快地写HTML代码,不用考虑换行等问题。
不过,Vue的初衷并不是滥用它,因为它将模板和组件的其他定义隔离了。
<div id="app">
<my-component></my-component>
<script type="text/x-template" id="my-component">
<div>这是组件的内容</div>
</script>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
Vue.component('my-component', {
template: '#my-component'
});
var app = new Vue({
el: '#app',
})
</script>
- 手动挂载实例
我们现在所创建的实例都是通过new Vue()的形式创建出来的。在一些非常特殊的情况下,我们需要动态地去创建Vue实例,Vue提供了Vue.extend和$mount两个方法来手动挂载一个实例。
手动挂载实例(组件)是一种比较极端的高级用法,在业务中几乎用不到,只在开发一些复杂的独立组件时可能会使用,所以只做了解就好。
<div id="mount-div">
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var MyComponent = Vue.extend({
template: '<div>Hello: {{ name }}</div>',
data: function() {
return {
name: 'Aresn'
}
}
});
// 方法一
// new MyComponent().$mount('#mount-div');
// 方法二
// new MyComponent({
// el: '#mount-div'
// })
// 方法三
var component = new MyComponent().$mount();
document.getElementById('mount-div').appendChild(component.$el);
</script>