首页 > 其他分享 >vue3

vue3

时间:2023-12-24 15:56:08浏览次数:26  
标签:const 对象 value msg vue3 组件 ref

vue3

    * vue3支持组合式传参, vue2在创建app对象的时候,会传入一个包含各种选项的对象,选项包括data函数,methods对象,computed对象等等。 vue3在创建app对象的时候,也是传入一个对象,但是对象属性中有一个setup函数,在该函数中可以定义响应对象,函数,computed,甚至watch等,然后将它们放在一个对象里面return出去。 vue3的方式对于组件开发是非常方便的,可以将数据对象和用来操作,监听该数据对象的函数放在一起,便于编写,查看和修改。

  1. [ ref & reactive ]
    • 二者都是用来定义响应数据对象的
    • ref: 支持原始类型如 string,获取和设置 ref 的值时需要通过其value属性获得,也就是 name.value()
    • reactive: 只支持对象,获取 reactive 相应对象的值时可以直接获取不需要通过 value 属性。
    • ref 可以 整体进行替换,而 reactive 只能修改设置对象内部属性,无法整体替换 相应对象。
    • reactive 对象可以通过 toRefs 函数,将其属性结构为 ref 对象
    • 总之,如果侧重于相应对象整体,或者要对响应对象进行解构操作,用 ref,侧重于相应对象局部,用 reactive

  2. [ upnlugin-auto-import 插件 ]
    • 该插件可以自动解构出vue的相关属性方法,不用自己手动去解构导入例如 ref,watch ...
    • 该插件需要npm安装,然后再 vite.config.js文件中进行配置,具体配置方法如下:
    import AutoImport from 'unplugin-auto-import/vite'
    
    // https://vitejs.dev/config/
    export default defineConfig({
      plugins: [
        vue(),
        AutoImport({
          imports: ['vue', 'vue-router'] // 自动导入 vue 和 vue-router 相关函数
        })
      ],
      resolve: {
        alias: {
          '@': fileURLToPath(new URL('./src', import.meta.url))
        }
      }
    })
    

  3. [ 生命周期 ]
  4. [ toRefs & computed ]
    • toRefs: 用来结构ref响应对象
    • computed 是一个函数,接受一个get回调或者包含get和set方法的对象作为参数。
    <template>
      <div>
        <input type="text" v-model="msg">
        <button @click="computedBtn">computedBtn</button>
        <br>
        <button @click="setBtn">setBtn</button>
      </div>
    </template>
    <script setup>
      // computed
      const msg = ref('')
      let newMsg = computed({
        get: () => {
          return msg.value + ':'
        },
        set: val => {
          msg.value = val.toUpperCase()
        }
      })
      const computedBtn = () => {
        msg.value = newMsg.value
      }
      const setBtn = () =>{
        newMsg.value = msg.value
        msg.value = newMsg.value
        console.log(msg.value)
      }
    
    </script>
    

  5. [ watch ]
    • watch 有三种写法,或者说是两种,因为前两种比较像
    • watch 函数接受三个参数:被监听对象/对象数组,处理函数,处理选项。
    • 第三个可选的参数是一个对象,支持以下这些选项:
      • immediate:在侦听器创建时立即触发回调。第一次调用时旧值是 undefined。
      • deep:如果源是对象,强制深度遍历,以便在深层级变更时触发回调。参考深层侦听器。
      • flush:调整回调函数的刷新时机。参考回调的刷新时机及 watchEffect()。
      • onTrack / onTrigger:调试侦听器的依赖。参考调试侦听器。
    • 文档参考
    <template>
      <input type="text" v-model="msg">
      <input type="text" v-model="obj.arr">
      <input type="text" v-model="obj2.arr">
    </template>
    <script setup>
      // 写法一 监听字符串对象
      const msg = ref('this is message')
      watch(msg, (newVal, oldVal)=>{
        console.log(msg.value)
      })
      
      // 写法二 监听完整对象
      const obj = reactive({
        arr: ['a', 'b', 'c']
      })
      watch(obj,(newVal, oldVal)=>{
        console.log(obj.arr)
      })
    
      // 写法三 监听对象属性
      const obj2 = reactive({
        arr: ['a', 'b', 'c']
      })
      watch(()=>obj2.arr, (newVal, oldVal)=>{
        console.log(obj2.arr)
      })
    
      // 立即监听 监听初始化时执行
      watchEffect(()=>{
        // code ...
      })
    </script>
    

  6. [ 事件 ]
    • vue中数据是单向传递的,如果父组件要得到子组件的值,可以通过在子组件中触发自定义事件,在父组件中监听该事件并进行处理来实现。
    // emit
    // 父组件有一个span 其颜色会根据另一个属性而变化 子组件会影响到该值,通过事件来改变值的内容 从而影响到颜色改变
    <script setup>
    import Color from './components/Color.vue'
      const color = ref('red')  
      const changeColor = newColor =>{
        color.value = newColor
      }
    </script>
    <template>
      <span :class="color">COLOR</span>
      <br>
      <Color @to-color="changeColor" />
    </template>
    <style scoped>
    span {
      font-size: 5em;
    }
      .red {
        color: red;
      }
      .blue {
        color: blue;
      }
    </style>
    
    <template>
        <button @click="$emit('toColor', 'red')">RED</button><br>
        <button @click="$emit('toColor', 'blue')">BLUE</button><br>
    </template>
    <style scoped>
    button {
        margin: 1em;
        font-size: 2em;
    }
    </style>
    
    • 父组件可以通过Props向子组件传值,在子组件的setup中要显示的声明这些值,然后才可以使用。
    • 插槽可以向子组件中预留位置插入想要插入的组件内容,子组件在预留插槽时也可以通过slot的属性来传值给父组件。

标签:const,对象,value,msg,vue3,组件,ref
From: https://www.cnblogs.com/anch/p/17915975.html

相关文章

  • VUE框架引入Vue3与Vue3和Vue2在main.js里的区别------VUE框架
    //不再引入vue了,Vue3中,引入了一个createApp函数,可以创建APP对象import{createApp}from'vue';//引入了一个根组件AppimportAppfrom'./App.vue';//这行代码创建了一个APP对象,类似于之前vue2的vm对象//app比vm更加轻便,代价是属性要少constapp=createApp(A......
  • 推荐一款 Vue3 调试神器!
    vue-devtools是一款基于Chrome浏览器的插件,可以用于调试vue应用,也可以用来辅助我们找到各页面对应的Vue.js文件路径,想必大家都不陌生吧~  今天给大家推荐一个比vue-devtools更好用的插件vite-plugin-vue-devtools,它是一个旨在增强Vue开发者体验的Vite插件。 插件......
  • uniapp框架——初始化vue3项目(搭建ai项目第一步)
    文章目录⭐前言......
  • 前端vue3——实现二次元人物拼图校验
    文章目录⭐前言⭐vue3拖拽实现拼图......
  • 记录--Vue3问题:如何实现组件拖拽实时预览功能?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助1.需求分析实现一个CMS内容管理系统,在后台进行内容编辑,在官网更新展示内容。关于后台的编辑功能,大致分为两部分:组件拖拽预览、组件内容编辑实时预览。对于组件拖拽预览,用户可以在含有各种功能组件的列表中,选择......
  • vue3 + java 查询数据前后端时间不一致如何解决?
    环境:vue3+springboot+mybatis+mysql 场景:后端返回的时间与前端接收到的时间,小时不一致,时间格式是古巴标准时间:"CST"解决:在Entity中时间字段上增加注解:@JsonFormat(pattern="yyyy-MM-ddHH:mm:ss",timezone="GMT+8")......
  • vue3调用高德地图,实现地址,经纬度填写
    父组件引用高德地图:1<template>2<divclass="wrapper">3<divclass="box">4<divclass="form-box">5<el-form6label-position="top"7:inline=&qu......
  • Vue3实现电商放大镜效果
    效果实现:功能拆解:左侧滑块跟随鼠标移动右则大图放大效果实现鼠标移入控制滑块和大图显示隐藏滑块跟随鼠标移动思路:获取到当前的鼠标在盒子内的相对位置(useMouseInElement),控制滑块跟随鼠标移动(left/top)获取鼠标相对位置控制滑块跟随移动有效移动范围内的计算逻辑......
  • vue3 + vant4 :form表单中,搭配 Popup 和 Field 实现vant-picker组件,设置默认值及默认选
    环境:vue3,vant4背景:Picker作为用于辅助表单填写,搭配Popup和Field。页面需要给picker设置默认值,city为温州,但是在popup弹出时,picker没有选中温州这个选项,还时停留在杭州。解决方案:看了很多解决方案,设置default-indexset,ColumnIndex。都尝试了,还是不行。而且这些方法,其实在v......
  • vue3--使用ref获取Dom元素
    vue2中,ref使用:在div元素上绑定了ref属性,并命名为hello,接下来我们直接使用this.$refs.hello的方式就可以获取到该DOM元素了。<template><divid="app"><divref="hello">Vue2,ref获取dom元素</div></div></template><script>......