您现在的位置是:网站首页> 编程资料编程资料
vue3:vue2中protoType更改为config.globalProperties问题_vue.js_
2023-05-24
324人已围观
简介 vue3:vue2中protoType更改为config.globalProperties问题_vue.js_
protoType替换为config.globalProperties
在main.js中:
vue2
Vue.prototype.$verson = '1.0.0'
使用
this.$verson
vue3
Vue.config.globalProperties.$verson = '1.0.0'
使用
Vue3 vs Vue2
Vue3 的新组件
Fragment
Vue2 中:组件必须有一个根标签
Vue3 中:可以没有根标签,内部会添加根标签
好处:减少标签层级,减少内存消耗
App
superman
Teleport
用于将组件的 HTML 结构移动到指定位置
用法:
① 用 Teleport 标签将需要移动的 HTML 结构包裹住
② 设置 to 属性,属性值为 选择器,以指定移动到的位置
默认情况下,子组件的 HTML 结构会显示到父组件的 HTML 结构里面;
使用 Teleport 标签包裹子组件的 HTML 标签,则能将该 HTML 结构显示到指定的位置
App
Son
Teleport Son
Suspense
等待异步组件时,渲染一些额外的内容,提升用户体验感
用法:
① 在父组件中,异步引入组件:defineAsyncComponent + 懒加载
② 在子组件中,配置 Suspense 标签
③ 在 Suspense 标签内,用 template 标签设置具名插槽
default 插槽的内容:为异步引入的组件
fallback 插槽的内容:为加载时显示的内容
此时,异步引入的组件中 setup 可以是 async 函数
App
加载中...
Son: {{ p }}
文件对比
main.js
Vue2
import Vue from 'vue' import App from './App.vue' import router from './router' import store from './store' Vue.config.productionTip = false new Vue({ router, store, render: h => h(App) }).$mount('#app') Vue3
引入的不再是 Vue 构造函数,而是工厂函数 createApp:
构造函数:通过 new 关键字调用,首字母大写
工厂函数:直接调用,首字母小写
createApp 返回:应用实例对象 (相当于 Vue2 中的 vm,但比 vm 轻)
可以在 createApp 之后链式调用其它方法
import { createApp } from 'vue' // 引入 createApp 方法 import App from './App.vue' import router from './router' import store from './store' createApp(App).use(store).use(router).mount('#app') // 链式调用store 文件
Vue2
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) export default new Vuex.Store({ state: {}, mutations: {}, actions: {}, modules: {} }) Vue3
import { createStore } from 'vuex' // 引入 createStore 方法 export default createStore({ state: {}, mutations: {}, actions: {}, modules: {} }) Vuex 的使用
先配置好 store 文件:
import { createStore } from 'vuex' export default createStore({ state: { name: "superman", arr: [1, 2, 3] }, mutations: { muModify(state, val) { console.log("commit muModify", val) state.name += val } }, actions: { acModify(context, val) { console.log("dispatch acModify", val) context.commit("muModify", val) } }, getters: { getArr(state) { return state.arr.map(item => item * 2) } }, modules: {} }) Vue3 中需要通过 useStore 方法使用 vuex
普通使用:
$store.state.name: {{ $store.state.name }}
$store.state.arr: {{ $store.state.arr }}
$store.getters.getArr: {{ $store.getters.getArr }}
Vue 3:
name: {{ name }}
arr: {{ arr }}
getArr: {{ getArr }}
|
但是,通过该方法获取的数据不是响应式的
响应式数据设置如下:需要配合 computed 方法使用
let name = computed(() => store.state.name); let arr = computed(() => store.state.arr); let getArr = computed(() => store.getters.getArr);
router 文件
Vue2
import Vue from 'vue' import VueRouter from 'vue-router' import Home from '../views/Home.vue' Vue.use(VueRouter) const routes = [{ path: '/', name: 'Home', component: Home }, { path: '/about', name: 'About', component: () => import('../views/About.vue') } ] const router = new VueRouter({ mode: 'history', // 设置路由模式为 history base: process.env.BASE_URL, // 根据 webpack 环境,设置 [根路径] routes }) export default router Vue3
import { createRouter, // 引入 createRouter 方法 createWebHistory // 引入 createWebHistory 方法 } from 'vue-router' import Home from '../views/Home.vue' const routes = [{ path: '/', name: 'Home', component: Home }, { path: '/about', name: 'About', component: () => import('../views/About.vue') } ] const router = createRouter({ history: createWebHistory(process.env.BASE_URL), routes }) export default router vue-router 的使用
先配置 router 文件
import { createRouter, createWebHistory } from 'vue-router' import Home from '../views/Home.vue' const routes = [{ path: '/', name: 'Home', component: Home }, { path: '/about', name: 'About', component: () => import('../views/About.vue') } ] const router = createRouter({ history: createWebHistory(process.env.BASE_URL), routes }) export default router Vue3 中需要通过 useRoute 方法使用 vue-router
Home |About
About
Home
全局 API
在 Vue3 中,全局和内部 API 都经过了重构
全局 API 现在只能作为 ES 模块构建的命名导出进行访问
import { nextTick } from 'vue' nextTick(() => { // 一些和DOM有关的东西 }) Vue.XXX → app.XXX

全局 directive
Vue2 - Vue.directive("自定义指令名", 配置对象)
import Vue from 'vue' import App from './App.vue' Vue.config.productionTip = false Vue.directive("focus", { bind() { console.log("指令与元素绑定时触发"); }, inserted(el) { console.log("指令所在元素插入页面时触发"); el.focus(); }, update(el) { console.log("模板重新渲染时触发"); el.focus(); } }); new Vue({ render: h => h(App) }).$mount('#app') 也可以使用简写(回调函数执行完后,DOM 才会插入到页面中):
Vue.directive("focus
点击排行
本栏推荐
