sync高级修饰符,单项数据流,v-model组件传值。

一.sync高级修饰符是用来干什么的?

1.子组件用来修改父组件传递过来的数据, 

2.传递的方式

 子:

 通过属性传值的方式, :属性名='要传递的值'

在子组件中定义:this.$emit(事件名,传递的参数)

父:

在父组件中: @事件名=‘函数名',通过在父组件中修改数据。

3.通过sync进行修改

在子组件上

代码演示:

    <son :num.sync="number" @input="number = $event"></son>
<template>
  <div class="">
    <button @click="fn(1)">+1</button>
    <input type="text" />
    <button @click="fn(-1)">-1</button>
  </div>
</template>

<script>
export default {
  props: {
    num: {
      type: Number,
    },
  },
  name: "",
  methods: {
    fn(val) {
      this.$emit("input", this.num + val);
    },
  },
};
</script>

解析:在son组件上加入了sync修饰符进行修饰,通过this.$emit将数据传递过去,this.num+val对应的是$event,这里不是事件对象,而是一种固定的写法.将值赋值给父组件中的number变量从而修改了里面的值。

二.V-model在组件上的使用

1.在子组件上使用V-model 进行绑定

在子组件的标签上通过v-model双向绑定:

 <son v-model="number"></son>

  data() {
    return {
      number: 1,
    };
  },

在son组件:

<template>
  <div class="">
    <button @click="fn(+1)">+1</button>
    <input type="text" />
    <button @click="fn(-1)">-1</button>
  </div>
</template>

<script>
export default {
  props: {
    value: {
      type: Number,
    },
  },
  model: {
    value:'value'
    event: "input",
  },
  name: "",
  methods: {
    fn(val) {
      this.$emit("input", this.value + val);
    },
  },
};
</script>

解析:  input如果不写是默认的,value不写也是默认的。实现了组件间的双向绑定。如果把需要进行更改,则需要全部进行修改。

三.单向数据流

1. 因为通过props来进行传递值的话,可能会造成父组件的数据发生改变所以官方不推荐使用。 

2.单向数据流:栈不可修改,堆可以修改
 基本数据类型不可修改,复杂数据类型,只要不改变它的引用地址(栈),它的值随便修改。
3.代码演示:

父组件:

    <son :arr="arr" />
    data() {
    return {
      arr: 1,
    };
   },

子组件:

  <button @click="fn"></button>
   props: {
    arr: {
      type: Number,
    },
  },
   methods: {
    fn() {
      this.arr = 2;
    },
  },

4.图示:

 子组件里面的数据更改

 5.当穿过去的是一个引用类型时候

 代码:

父组件:

 <son :obj="obj" />
 data() {
    return {
      obj: {
        name: "张三",
      },
    };
  },

子组件:

 <button @click="fn">点击修改</button>
 
    methods: {
    fn() {
      this.obj.name = "赵云";
    },
  },

图示:因为穿过去的数组属于复杂的数据类型,值保存在栈中的地址上,传过去的也是一个地址,

和子组件公用一个地址,子组件的值发生改变,父组件的值也会发生改变

 6.

7.model属性的应用

总共有两个配置项:

 解析:默认值是input,value。 如果要进行修改 直接在event和value后面进行修改。

8.总结: 在使用props进行传递值的时候,不建议修改值,因为可能会影响到父组件的数据。

猜你喜欢

转载自blog.csdn.net/qq_59076775/article/details/121405583