Vue3的安装脚手架

vue3安装:
  1 @vue/cli
    全局安装@vue/cli
    cnpm i @vue/cli -g
    创建项目
    vue create 项目名

  2 vite
    安装vite
    cnpm init vite@latest

    进入项目
    cd 项目名
    cnpm i
    cnpm run dev

  vue3语法
    数据插值使用{{变量或者常量}}
    格式:
      <script setUp>
        const a=123
      </script>

      {{a}}

    想要修改数据 有两种形式
    需要使用组合式api里边相关的方法
      ref 修改或者获取基本数据类型
      import {ref} from 'vue'

      const a=ref(123)

      const 事件名=()=> {
        a.value=新值
      }

      reactive 修改或者获取引用类型 或者是比较复杂的数据类型
      import {reactive} from 'vue'

      const arr=reactive([1,2,3])

      const 事件名=()=> {
        arr[0]=新值
      }

    vue3引入axios
      局部引入
        安装axios
        cnpm i axios --save-dev
        在使用的组件中 引入axios
        import axios from 'axios'

        axios.get()
        axios.post()

    vue3路由配置
      安装vue-router
      npm install vue-router@4 --save-dev
      需要在根目录创建router文件 里边创建index.js文件
      import {createRouter, createWebHistory} from 'vue-router'
      import 组件 from '路径'

      const routes=[
        {
          path: '',
          name: '',
          component: 组件
        }
      ]

      const router=createRouter({
        history: createWebHistory(),
        routes
      })

      export default router

      在main.js文件中引入router 并且调用router

      import router from '路径'

      createApp("").use(router).mount("")

    vue3获取路由组件传值有两种
      1 以问号形式传值  获取参数使用query
      import {useRoute} from 'vue-router'

      const $route=useRoute()

      console.log($route.query.属性名)

      2 以斜杠形式传值  获取参数使用params
      import {useRoute} from 'vue-router'

      const $route=useRoute()

      console.log($route.params.属性名)

    vue3使用编程式导航
      1 引入useRouter
      import {useRouter} from 'vue-router'

      2 调用router 实现编程式导航
      const $router=useRouter()

      const 方法名=()=> {
        $router.push({
          name: 'name名'
        })

        $router.push({
          path: 'path路径'
        })

        $router.push({
          path: 'path路径',
          params: {
            id:123
          }
        })  // /path/123

        $router.push({
          path: 'path路径',
          query: {
            id: 123
          }
        })  // /path?id=123

      }

    vue3组件传值
      父组件向子组件
        1 在子组件中使用defineProps来定义props
        defineProps({
          自定义数据: {
            type: 数据类型,
            default: 默认值
          }
        })
        2 在父组件中找到子组件标签 在子组件标签上使用v-bind:自定义数据="要发送的数据"

      子组件向父组件
        1 在子组件中定义事件 使用defineEmits来发送数据
        <button @click="事件"></button>

        const emit=defineEmits(['方法名1','方法名2', ...])

        const 事件=()=> {
          emit('方法名1',要传递参数)
          emit('方法名2',要传递参数)
          ...
        }

        2 在父组件中找到子组件标签 在子组件标签上使用@方法名1="新的方法名"
        <子组件标签 @方法名1="新的方法名"></子组件标签>

        const 新的方法名=(data)=> {
          console.log(data)
          // data就是子组件传递过来的数据
        }

      非父子组件
        1 安装mitt插件 
        cnpm i mitt --save-dev
        2 创建bus.js文件  
        import mitt from 'mitt'

        const bus=mitt()

        export default bus
        3 在需要发送数据的组件 使用bus.emit发送数据 
        import bus from '路径'

        const 事件=()=> {
          bus.emit('新的方法名', 要发送的数据)
        }

        4 在需要接受数据的组件中 使用bus.on接受数据
        import bus from '路径'

        bus.on('新的方法名', (data)=> {
          console.log(data)
          // data就是传递过来的数据
        })

      vue3中provide inject
        使用场景:
          可以实现非父子组件传值(父组件的父组件想要给你子组件传值)

        1 在需要发送数据组件中 使用provide('自定义属性名',要发送的数据)
        import {provide} from 'vue'

        provide('自定义属性名',要发送的数据)

        2 在需要接受数据的子组件中 使用inject('自定义属性名')来获取数据
        import {inject} from 'vue'

        inject('自定义属性名')  // 该值就是发送过来的数据

        注意:
          使用provide和inject只能实现自上而下组件数据传值  这个值的传递是不可逆
        

    vue3中watch数据监听
      格式:  
        import {watch} from 'vue'

        // 第一个参数 如果直接写的是数据  代表当前的数据 为基本数据类型中数据
        watch(被监听的数据, (val, oldVal)=> {
          console.log(val, oldVal)   // 新值  老值
        },{immediate: true, deep: true})
        // immediate 是否立即执行数据监听
        // deep  是否对嵌套过身的数据 进行深度监听

        // 如果第一个参数监听的为对象  则第一个参数应付写为 函数形式  

        const obj={
          name: '111'
        }

        watch(()=> obj.name, (val, oldVal)=> {
          console.log(val, oldVal)   // 新值  老值
        },{immediate: true, deep: true})
        // immediate 是否立即执行数据监听
        // deep  是否对嵌套过身的数据 进行深度监听

        // 如果监听数据有多个

        watch([数据1,数据2], ([数据1新值, 数据2新值],[数据1老值, 数据2老值])=> {
          console.log(数据1新值, 数据2新值)
          console.log(数据1老值, 数据2老值)
        })

      vue3 computed计算属性
      当函数表达式比较复杂的时候我们可以使用
        格式:  
          import {computed} from 'vue'
          const msg='hello'

          // 推荐使用
          const 常量名=computed(()=> {
            return 计算方法
          })

          常量名直接当作data来进行使用


          对象   了解
          const 常量名=computed({
            get: ()=> {
              return 计算方法
            },
            set: (val)=> {
              msg.value=val
            }
          })

          console.log(常量名)  // 相当于执行get方法
          常量名.value=新值  // set val等价新值
          console.log(常量名.value) // 相当于执行到了set方法


    https://www.imooc.com/learn/861
        


版权声明:本文为Paolooo原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。