<script type="importmap">
{
"imports": {
"vue": "https://unpkg.com/vue@3/dist/vue.esm-browser.js"
}
}
</script>
<div id="app">{{ message }}</div>
<script type="module">
import { createApp } from 'vue'
createApp({
data() {
return {
message: 'Hello Vue!'
}
}
}).mount('#app')
</script>
Vue的错误处理机制主要有以下几种:
- errorCaptured钩子:可以捕获后代组件的错误,如果errorCaptured中返回false,则会阻断传播。
- errorHandler:可以全局处理程序中的错误,如果组件出现错误,会触发该钩子。
Vue错误处理的使用方式是在组件中使用errorCaptured钩子或全局使用errorHandler。
Vue的组件通信方式有以下几种:
- props:最基本、最常用的通信方式。
- event bus:可以在任意组件之间实现通信,但缺点是会造成全局命名空间污染。
- vuex:适合大型项目,优点是简单、方便、快捷,缺点是不适合小型项目。
- attrs&listeners:可以解决跨层通信问题,但使用较少。
- vue-property-decorator:可以解决父子组件通信问题,但使用较少。
Vue的路由懒加载是一种只在需要的时候才会加载的机制,也叫延迟加载。
Vue路由懒加载的实现方式是将路由对应的组件打包成一个个的js代码块,只有在这个路由被访问到的时候,才会加载对应组件的代码块。
Vue路由懒加载的作用是将各个模块分开打包,用户查看的时候再加载对应的模块,减少加载用时,从而提高用户体验。
Vue的组件是Vue.js最强大的功能之一,可以扩展HTML元素,封装可重用的代码。
Vue组件的创建和使用方法如下:
- 局部注册组件:通过vue构造器去拓展一个模板,然后注册,最后使用。
- 全局注册组件:通过Vue.extend方法创建组件,然后通过Vue.component方法注册。
Vue的插件是可以为Vue应用提供新功能的独立模块,通过全局方法Vue.use()来使用插件。Vue插件的开发和使用流程如下:
- 创建一个js文件来编写你的插件内容。
- 在入口文件中导入此插件对象进行使用。
- 使用Vue.use(插件名,可选参数)方法就能实现插件的引入使用,此方法的调用一定要放在new Vue({ })之前,确保项目里面的所有组件都能访问到此组件。
Vue的异步加载是一种只在组件需要渲染的时候进行加载渲染并缓存的机制,是实现组件异步加载的一种方式。
Vue异步加载适用于当项目功能越来越多,所包含的子组件也越来越多,导致页面加载过慢,所以需要优化页面加载的性能的情况。
Vue异步加载可以通过以下方式实现:
- 定义异步组件,在组件声明中,使用resolve和require.ensure函数来加载组件代码。
- 在需要使用异步组件的地方,直接使用组件名即可。当组件渲染时,组件代码才会被加载并且显示。
Vue的生命周期钩子有:
- beforeCreate:实例创建之前,这时实例还没创建,所以data还不知道,也不能用watch监听。
- created:实例创建之后,这时实例已经创建完,可以得到data,调用watch,但是页面还是空白的。
- beforeMount:挂载前状态,这时还是把我们的‘#app’生成虚拟DOM,生成完毕后并渲染到view层。
- mounted:挂载结束状态,渲染到真正的DOM。
- beforeUpdate:可以拿到Vue实例化改变前的状态。
- updated:拿到变动完成的状态。
- beforeDestroy:消亡前的状态。
- destroyed:实例化或组件被摧毁消亡。
Vuex是Vue.js应用程序的状态管理模式。
在Vue项目中使用Vuex的场景有:
- 多个组件共享状态。
- 状态需要被多个组件共同修改。
- 代码结构简化。
- 方便调试和跟踪。
Vue中的diff算法是一种通过同层的树节点进行比较的高效算法,其比较只会在同层级进行,不会跨层级比较。在diff比较的过程中,循环从两边向中间比较。Vue中的diff算法在很多场景下都有应用,在vue中,作用于虚拟dom渲染成真实dom的新旧VNode节点比较。
Vue的渲染机制是将数据模型动态地绑定到视图层,将模型数据动态地渲染到视图层上,使用的是双向绑定技术,即当模型数据发生变化时,视图层也发生变化,视图层一旦发生变化,模型数据也发生变化。这种机制使得开发者只需要关注数据的变化,无需过多地考虑视图的变化,从而大大提高了开发效率和易用性。
Vue的渲染机制底层原理是通过创建虚拟DOM和更新虚拟DOM来实现。当Vue实例的状态发生变化时,会触发重新渲染,自动更新视图。Vue会通过渲染函数获取虚拟DOM,用于描述界面结构。当视图需要更新时,Vue会通过diff算法比较新旧虚拟DOM的差异,生成可以最小化更新的操作序列。
Vue的事件机制是通过监听器将事件与组件进行关联,当事件被触发时,监听器会调用组件中对应的处理函数。
Vue实例上会创建一个对象来保存所有要监听的事件,每当我们要监听一个事件,就往对象中添加一个键值对,事件的名称作为键,一个空数组作为值。
- on:添加事件监听器;
- off:移除事件监听器;
- emit:触发事件;
- once:添加一个只执行一次的事件监听器。
computed和watch的区别:
- computed是计算属性,通过属性计算得来的属性,而watch是监听一个值的变化,然后执行对应的回调1。
- computed中的函数直接调用,不用加(),而watch中的函数不需要调用1。
- computed是依赖data中的属性,data中属性发生改变的时候,当前函数才会执行,而watch不支持缓存1。
- computed属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算,而watch一个对象,键是需要观察的表达式,值是对应回调函数。
computed和watch的运用场景:
- computed适合用在多个数据相互影响,需要处理复杂逻辑或多个属性影响一个属性的变化时使用,例如:购物车商品结算等。
- watch适合用在数据影响多个数据,需要在数据变化时执行异步操作或者开销较大的操作时使用,例如:搜索数据等。
Vue的响应式原理是通过Object.defineProperty对数据进行劫持,并结合发布订阅者模式实现。
Vue利用Object.defineProperty创建一个observe来劫持监听所有的属性,把这些属性全部转为getter和setter。在模板中使用到响应式数据的地方,Vue会通过Watcher对象建立起依赖关系。当数据发生变化时,Dep会通知订阅者(Watcher)进行更新。当数据发生变化时,订阅者(Watcher)会接收到通知,并执行相应的更新操作,保持视图与数据的同步。