组件通信

143 阅读1分钟

父子通信

1.传统props emit

vue2.0


 //父传子
 <add-departments
      :showadddept="showAddDept"
      @close-dia="closeDia"
    />
  //子传父
  props: {
    showadddept: {
      type: Boolean,
      default: false
    }
  }
  
 closeDia () {
      this.$emit('close-dia')
 },

vue3.0

 //父传子
 <add-departments
      ref="addDep"
      :depslist="depsList"
      :showadddept="showAddDept"
      @close-dia="closeDia"
    />
  //子传父
  props: {
    showadddept: {
      type: Boolean,
      default: false
    }
  }
  
  emits:['close-dia']
  
 closeDia () {
      this.$emit('close-dia')
 },

区别:vue3.0添加了emits

2.v-model

vue2.0

//父传子
 <Field v-model="formData.isAgree">
            <span>我已同意</span>
 </Field>

//子传父
  props: {
    value: { 
      type: Boolean,
      default: false
    }
  },
  
  setup (props, { emit }) {
  
    const changeChecked = () => {
      emit('input', checked.value)
    }
  }

vue3.0

//父传子
 <Field as="XtxCheckBox" name="isAgree" v-model="formData.isAgree">
            <span>我已同意</span>
 </Field>

//子传父
  props: {
    // vue3.0 v-model用法 (不支持.sync修饰符)
    // 父组件:传递
    // <XtxCheckBox v-model="sel" v-model:meng="goods"> 选择 </XtxCheckBox>
    // 子组件:接收多个v-model值
    // 默认
    modelValue: { // 更新使用 => emit('update:modelValue', newVal)
      type: Boolean,
      default: false
    },
    // 其它
    meng: Object // 更新使用=》emit('update:meng', newVal)
  },
  
  emits:['update:modelValue','change'],
  
  setup (props, { emit }) {
    const changeChecked = () => {
 
      emit('update:modelValue', checked.value)
      // 传递状态
      emit('change', checked.value)
    }
  }

3.$ parent $children

区别 2.0 sync update

3.0v-model

1.v-model语法糖绑定组件vue3.0 父子通信双向

父传子

一个情况下v-mode

v-model='name'

props modelValue

事件 update:modelValue

多个v-model-

v-model:绑定名字="变量"

props 绑定名字:{}

事件 update:绑定名字

vue2.0的sync和v-model合并了

vue3.0没有.sync

同级通信

vuex通信

vuex 是 vue 的状态管理器,存储的数据是响应式的。但是并不会保存起来,刷新之后就回到了初始状态,具体做法应该在vuex里数据改变的时候把数据拷贝一份保存到localStorage里面,刷新之后,如果localStorage里有保存的数据,取出来再替换store里的state。

跨级通信

1.依赖注入

provide('变量名',注入变量)

子代

const 变量 = inject('变量名')

2.vuex

特殊

路由通信

router可以加 params和query参数

$refs可以拿到组件实例