Vue(4)

组件通信

组件通信, 就是指组件与组件之间的数据传递

组件的数据是独立的,无法直接访问其他组件的数据

想用其他组件的数据 → 组件通信

组件关系

父子关系

通信解决方案

props&emit

prop
定义

组件上注册的一些自定义属性

作用

向子组件传递数据特点

特点

可以传递任意数量的prop

可以传递任意类型的prop

校验

为组件的prop 指定验证要求,不符合要求,控制台就会有错误提示

类型校验

非空校验

默认值

自定义校验

  props: {
    校验的属性名: {
      type: 类型,
      required: true,//是否必填
      default: 默认值,//默认值
      validator(val) {
        //自定义逻辑
        return 是否通过校验
      }
    }
  }
  props: {
    w: {
      type: Number,
      required: true,
      default: 0,
      validator(val) {
        // console.log(val)
        if (val >= 100 || val <= 0) {
          console.error('传入的范围必须是0-100之间')
          return false
        } else {
          return true
        }
      },
    },
  },

父组件通过 props 将数据传递给子组件

父中给子添加属性传值

子props 接收

子组件使用

子组件利用 $emit 通知父组件修改更新

子$emit 发送消息

父中给子添加消息监听

父中实现处理函数

非父子关系

通信解决方案

provide & inject

event bus

通用解决方案

Vuex (适合复杂业务场景)

进阶语法

v-model

原理

v-model本质上是一个语法糖。例如应用在输入框上,就是 value属性 和 input事件 的合写。

作用

提供数据的双向绑定

数据变,视图跟着变

value

视图变,数据跟着变

@input

注意

$event 用于在模板中,获取事件的形参

表单类组件封装 & v-model 简化代码

父传子

数据 应该是父组件 props 传递 过来的,拆解 v-model 绑定数据

子传父

监听输入,子传父传值给父组件修改

.sync修饰符

作用

可以实现子组件与父组件数据的双向绑定,简化代码

特点

prop属性名,可以自定义,非固定为 value

场景

封装弹框类的基础组件, visible属性 true显示 false隐藏

本质

就是 :属性名 和 @update:属性名 合写

ref 和 $refs

作用

利用 ref 和 $refs 可以用于 获取 dom 元素, 或 组件实例

特点

查找范围 → 当前组件内

获取 dom

目标标签 – 添加 ref 属性

<div ref="chartRef">我是渲染图表的容器</div>

恰当时机, 通过 this.$refs.xxx, 获取目标标签

mounted () {

console.log(this.$refs.chartRef)

},

获取组件

目标组件 – 添加 ref 属性

<BaseForm ref="baseForm"></BaseForm>

恰当时机, 通过 this.$refs.xxx, 获取目标组件,就可以调用组件对象里面的方法

this.$refs.baseForm.组件方法()

Vue异步更新

需求:编辑标题, 编辑框自动聚焦

点击编辑,显示编辑框

this.isShowEdit = true // 显示输入框

让编辑框,立刻获取焦点

$nextTick

等 DOM 更新后, 才会触发执行此方法里的函数体

语法

this.$nextTick(函数体)

this.$nextTick(() => {

this.$refs.inp.focus()

})


Vue(4)
http://localhost:8090//archives/vue-4
作者
转转
发布于
2024年11月25日
许可协议