vue3.0生态的体验

包含路由,vuex,计算器属性,监听,当前对象,上下文,等api的体验
与element-plus组件的加载使用

配置如下
main.js

import {
    
     createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import 'element-plus'
const app = createApp(App)
import {
    
    
    ElAlert,
    ElAside,
    ElAutocomplete,
    ElAvatar,
    ElBacktop,
    ElBadge,
    ElBreadcrumb,
    ElBreadcrumbItem,
    ElButton,
    ElButtonGroup,
    ElCalendar,
    ElCard,
    ElCarousel,
    ElCarouselItem,
    ElCheckbox,
    ElCheckboxButton,
    ElCheckboxGroup,
    ElCol,
    ElCollapse,
    ElCollapseItem,
    ElColorPicker,
    ElContainer,
    ElDatePicker,
    ElDialog,
    ElDivider,
    ElDrawer,
    ElDropdown,
    ElDropdownItem,
    ElDropdownMenu,
    ElFooter,
    ElForm,
    ElFormItem,
    ElHeader,
    ElIcon,
    ElImage,
    ElInput,
    ElInputNumber,
    ElLink,
    ElMain,
    ElMenu,
    ElMenuItem,
    ElMenuItemGroup,
    ElOption,
    ElOptionGroup,
    ElPageHeader,
    ElPagination,
    ElPopconfirm,
    ElPopover,
    ElPopper,
    ElProgress,
    ElRadio,
    ElRadioButton,
    ElRadioGroup,
    ElRate,
    ElRow,
    ElSelect,
    ElSlider,
    ElStep,
    ElSteps,
    ElSubmenu,
    ElSwitch,
    ElTabPane,
    ElTable,
    ElTableColumn,
    ElTabs,
    ElTag,
    ElTimePicker,
    ElTimeSelect,
    ElTimeline,
    ElTimelineItem,
    ElTooltip,
    ElTransfer,
    ElTree,
    ElUpload,
    ElInfiniteScroll,
    ElLoading,
    ElMessage,
    ElMessageBox,
    ElNotification,
} from 'element-plus';

const components = [
    ElAlert,
    ElAside,
    ElAutocomplete,
    ElAvatar,
    ElBacktop,
    ElBadge,
    ElBreadcrumb,
    ElBreadcrumbItem,
    ElButton,
    ElButtonGroup,
    ElCalendar,
    ElCard,
    ElCarousel,
    ElCarouselItem,
    ElCheckbox,
    ElCheckboxButton,
    ElCheckboxGroup,
    ElCol,
    ElCollapse,
    ElCollapseItem,
    ElColorPicker,
    ElContainer,
    ElDatePicker,
    ElDialog,
    ElDivider,
    ElDrawer,
    ElDropdown,
    ElDropdownItem,
    ElDropdownMenu,
    ElFooter,
    ElForm,
    ElFormItem,
    ElHeader,
    ElIcon,
    ElImage,
    ElInput,
    ElInputNumber,
    ElLink,
    ElMain,
    ElMenu,
    ElMenuItem,
    ElMenuItemGroup,
    ElOption,
    ElOptionGroup,
    ElPageHeader,
    ElPagination,
    ElPopconfirm,
    ElPopover,
    ElPopper,
    ElProgress,
    ElRadio,
    ElRadioButton,
    ElRadioGroup,
    ElRate,
    ElRow,
    ElSelect,
    ElSlider,
    ElStep,
    ElSteps,
    ElSubmenu,
    ElSwitch,
    ElTabPane,
    ElTable,
    ElTableColumn,
    ElTabs,
    ElTag,
    ElTimePicker,
    ElTimeSelect,
    ElTimeline,
    ElTimelineItem,
    ElTooltip,
    ElTransfer,
    ElTree,
    ElUpload,
]

const plugins = [
    ElInfiniteScroll,
    ElLoading,
    ElMessage,
    ElMessageBox,
    ElNotification,
]


components.forEach(component => {
    
    
    app.component(component.name, component)
})

plugins.forEach((plugin: any) => {
    
    
    app.use(plugin)
})

app.use(store).use(router).mount('#app')

路由index.js配置

import {
    
     createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
import Home from '../views/Home.vue'

const routes: Array<RouteRecordRaw> = [
  {
    
    
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    
    
    path: '/about',
    name: 'About',
    // route level code-splitting
    // this generates a separate chunk (about.[hash].js) for this route
    // which is lazy-loaded when the route is visited.
    component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
  }
]

const router = createRouter({
    
    
  history: createWebHistory(process.env.BASE_URL),
  routes
})

export default router

vuex 配置

import {
    
     createStore } from 'vuex'
interface Obj {
    
    
  name: string;
  age: number;
  sex: string;
}
export default createStore({
    
    
  state: {
    
    
    obj: {
    
    
      name: '123',
      age: 21,
      sex: '男'
    },
    index: 0
  },
  mutations: {
    
    
    ina: function (state,data) {
    
    
      state.index = state.index + data
    }
  },
  actions: {
    
    
    ind: function ({
    
    commit}) {
    
    
      commit('ina',1)
    }
  },
  modules: {
    
    
  },
  getters: {
    
    
    liu: function (state) {
    
    
      return state.obj
    },
    indexa: function (state) {
    
    
      return state.index
    }
  }
})

home组件内容

<template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png">
    <HelloWorld msg="Welcome to Your Vue.js + TypeScript App"/>
    
  <el-button type="primary" @click="click">主要按钮</el-button>
  {
    
    {
    
    index}}{
    
    {
    
    name}}{
    
    {
    
    age}}{
    
    {
    
    number}}{
    
    {
    
    per.liu}}{
    
    {
    
    per}}
  </div>
</template>

<script lang="ts">
import {
    
     computed, defineComponent, getCurrentInstance, reactive, ref, toRefs, watch } from 'vue';
import HelloWorld from '@/components/HelloWorld.vue'; // @ is an alias to /src
import {
    
    useStore} from 'vuex'
import {
    
    useRoute,useRouter} from 'vue-router'
export default defineComponent({
    
     //定义组件
  name: 'Home',
  components: 
    HelloWorld,
  },
  setup (props: object, context: object) {
    
    
  //props当前实例,context上下文 包含slot attr props emit等等
    const sta = useStore() //使用vuex 包含state dispatch getters commit
    const rou = useRoute() // 路由信息 query path name params state等等
    const dis = useRouter() // 包含push go back等等
    const current = getCurrentInstance()// 包含data props type root等等
    console.log(sta.getters)
    console.log(current)
    console.log(rou.query)
    console.log(dis)
    const index = ref(0)
    const obj = reactive({
    
    
      name: 'liu',
      age: 21
    })
    interface Str {
    
    
      a: string;
    }
    const aa: Str = {
    
    
      a: '12'
    }
    console.log(aa)
    const click = function (e: object) {
    
    
      index.value ++  
      console.log(index.value)
      console.log(e)
      console.log(self)
      console.log(props, context)
      // sta.dispatch('ind')
      sta.commit('ina', 2)
      // dis.push({
    
    
      //   path: '/about'
      // })
    }
    watch(index,(val)=>{
    
     // 监听
      console.log(val,1)
    })
    const per = computed(() => {
    
    return sta.getters})
    //类似2.x的mapgetters
    const number = computed(() => {
    
    return index.value + 1})
    return {
    
    
      click,
      index,
      ...toRefs(obj),
      number,
      per
    }
  }
});
</script>

猜你喜欢

转载自blog.csdn.net/qq_43505774/article/details/112095056