首页 > 其他分享 >Vue: Day_2

Vue: Day_2

时间:2024-11-13 19:34:54浏览次数:1  
标签:Vue DOM focus value 传递 组件 ref Day

Vue基础

Chapter 2


  • 当想获取父组件传递的属性或者值时但是不通过define方法

    • $attrs获取父组件传递的属性如:<Child class="child" />,可以通过$attrs.class获取

    • 如果控制输入类或者点击类的DOM,但是又是父组件传递处理函数这是就需要$emit(handleFn, $event)来访问到父组件传递的函数$emit,以及操作对象$event

    • $slots来判断父组件是否有传该插槽

      • <Child>
            // 可以通过 value.hello 访问到子组件传递的hello值:su
        	<template #header="value">hello</template>
            <template v-slot:main="mainValue">world</template>
            <div>
                default
            </div>
        </Child>
        
        // Child组件下
        <template>
        	<div v-if="$slots.header">
                <slot name="header" hello="su" />
            </div>
        	<div v-if="$slots.main">
                <slot name="main" />
            </div>
        	<div v-if="$slots.default">
                <slot />
            </div>
        </template>
        
  • 在3.5+之后,想要通过ref操作DOM,应该使用useTemplateRef<HTMLDivElement>('div')

  • v-ifv-for不推荐在同一个DOM上使用,因为它们的优先级不够明确。如果在同一个DOM上使用,则v-if会先执行,也就是v-if访问不到v-for中的变量

  • 当父组件传递给子组件一些props时,值的name建议像HTML的属性一样比较规范,如: <Child :is-false="false" />,而子组件可以正常使用小驼峰进行接收

  • 父组件子组件传递属性时,如果子组件只有一个根元素的话,则该根组件会自动赋予父组件传递的属性。如果子组件有超过一个的根元素,则可以通过$attrs来手动规定赋予给哪一个元素,如:<div v-bind="$attrs"></div>

  • 如果要阻止根元素自动继承父组件传递的属性可以使用defineOptions({inheritAttrs: false})来禁止自动继承

  • 注入与提供

    • 防止多层传递,而中间的层数却用不到该值

    • 父组件传递provide('定义name', value: 传递的值)

    • 深层子组件接收inject<number>('父组件定义的name', value: 当没有值时返回该默认值, boolean: 为true时将会执行第二个参数的结果并返回)

  • 异步组件defineAsyncComponent(() => {})返回一个promise

    • defineAsyncComponent({
      	// 导入
      	loader: () => import('./App.vue'),
      	// 在导入过程中会显示的组件
      	loadingComponent: <Loading />,
      	// 指定多久后 再导入
      	delay: 20,
      	errorComponent: <Error />,
      	// 规定多久后超时
      	timeout: 4000,
      })
      
  • 组合式函数

    • 通过组合式函数来减少代码耦合

    • export function useMouse() {
      	const x = ref(0);
      	const y = ref(0);
      	
      	function move(e: MouseEvent) {
              x.value = e.target.pageX;
              y.value = e.target.pageY;
          }
          
          onMounted(() => window.addEventListener('mousemove', move))
          onUnmounted(() => window.removeEventListener('mousemove', move))
          
          // x, y 是 ref 具有响应式,但是包裹的对象不具有响应式
          return { x, y };
      }
      
  • toValue是3.5+后提供的函数,通过vue导入,可以解构ref,如果是普通的变量就正常返回,toValue(ref('su')) // sutoValue('su') // su

  • 自定义指令:const vFocus = { mounted: (el) => el.focus() },赋值DOM:<input v-focus />,DOM渲染后,将会自动聚焦

    • // 可以在全局注册自定义指令
      const app = createApp(App);
      app.directive('focus', {
      	mounted(el, bindingValues, VNode) {
      		el.focus();
      		// bindingValues.value是 v-focus="value"
      		// bindingValues.oldValue是 更新前的旧值
      		// bindingValues.org是 v-focus:arg
      		// bindingValues.modifiers是 v-focus.capitalize
      	}
      })
      

标签:Vue,DOM,focus,value,传递,组件,ref,Day
From: https://www.cnblogs.com/jsst/p/18544616

相关文章

  • 【云岚到家】-day09-3-优惠券核销
    【云岚到家】-day09-3-优惠券核销4优惠券核销4.1需求分析1)界面原型2)可用优惠券列表数据分析3)核销优惠券4)小结4.2获取可用优惠券4.2.1查询可用优惠券接口1)交互流程2)查询可用优惠券接口定义3)定义service接口4)controller方法4.2.2订单管理服务查询可用优惠券1)查询可......
  • Vue3的高级概念
    片段(Fragment)问题:在Vue组件中,通常只能返回一个根元素。如果需要返回多个根元素,传统的做法是包裹在一个父元素中,但这可能会影响布局或样式。解决方案:Vue3引入了片段(Fragment),允许组件返回多个根元素,而不需要额外的父元素。示例代码:plaintext<template><div>Element......
  • 基于SpringBoot+Vue的毕业设计管理系统设计与实现毕设(文档+源码)
    目录一、项目介绍二、开发环境三、功能介绍四、核心代码五、效果图六、源码获取:         大家好呀,我是一个混迹在java圈的码农。今天要和大家分享的是一款基于SpringBoot+Vue的毕业设计管理系统,项目源码请点击文章末尾联系我哦~目前有各类成品毕设JavaWeb......
  • Day4
    Day4当天站立式会议照片团队成员姓名学号昨天已完成的工作今天计划完成的工作工作中遇到的困难林涛(组长)3122004618完成验证码校验api补足各方面null杨森3122004629完成验证码前端展示完成验证码前端展示null钟礼骏3122006504前端展示家长模块前端......
  • Day5
    Day5当天站立式会议照片团队成员姓名学号昨天已完成的工作今天计划完成的工作工作中遇到的困难林涛(组长)3122004618完成验证码校验api测试api如何进行测试杨森3122004629完成验证码前端展示完成家长模块null钟礼骏3122006504前端展示家长模块完成......
  • VUE 封装axios
    axios官方介绍:https://www.axios-http.cn/docs/intro node.js安装:npminstallaxios封装一个配置文件constinstance=axios.create({baseURL:'https://some-domain.com/api/',timeout:1000,headers:{'X-Custom-Header':'foobar'}});......
  • Vue网站发布到iis后提示404页面不可访问
    vue重定向和跨域配置:https://zhuanlan.zhihu.com/p/5306882511.安装组件:URLRewrite:https://www.iis.net/downloads/microsoft/url-rewriteApplicationRequestRouting:https://www.iis.net/downloads/microsoft/application-request-routing2.新建一个web.config放到发布到文件......
  • 揭秘!Vue3.5响应式重构如何让内存占用减少56%
    前言Vue3.5版本又将响应式给重构了,重构后的响应式系统主要有两部分组成: 双向链表和版本计数。我们在前两篇文章中我们已经讲过了,这篇文章我们来讲讲为什么这次重构能够让内存占用减少56%。为什么说“又”将响应式重构了因为在之前的Vue3.4版本中刚刚将响应式给重构了,这......
  • 【vue2】14.插槽
    目录插槽-默认插槽插槽基本语法:插槽-后备内容(默认值)插槽-具名插槽插槽-作用域插槽插槽-默认插槽作用:让组件内部的一些结构支持自定义需求:将需要多次显示的对话框,封装成一个组件问题:组件的内容部分,不希望写死,希望能使用的时候自定义。怎么办?插槽......
  • vue3开发扫雷游戏,支持调整难度,支持计时
    闲来练习练习js,写了个扫雷游戏,直接拿去复制粘到自己本地某个html文件里就能运行,记得把vue加载地址改成线上的~~有空了可以再加上计分板运行起来长下面这样 直接上代码 1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<met......