Python Web前端开发篇(5)---vue组件传递数据

1 组件传递数据(父传子)

组件最大的优势是可复用性,我们一般会将Vue组件定义在一个单独的.vue文件中,即单文件组件(SFC)。组件和组件之间不是完全独立的,而是有交集的,那就是组件和组件之间是可以传递数据的,传递数据的解决方案就是props:

父组件传递title变量给子组件:

<template>
  <h3>Parent</h3>
  <Son :title="title"/>
</template>

<script>
import Son from "./Son.vue"
export default {
  data(){
    return{
      title: "你快乐吗!"
    }
  },
  components:{
    Son
  }
}
</script>
<template>
  <h3>Son</h3>
  <p>{{ title }}</p>
</template>

<script>
export default {
  data(){
    return{

    }
  },
  props:["title"]
}
</script>

注意事项:props只能从父级传递给子级,不能反其道而行之。

2 组件传递多种数据类型

<template>
  <h3>Parent</h3>
  <Son :title="title" :money="money" :girlfriends="girlfriends" :boyfriend="boyfriend"/>
</template>

<script>
import Son from "./Son.vue"
export default {
  data(){
    return{
      title: "你快乐吗!",
      money: 100000,
      girlfriends: ["alen", "fake", "fuck"],
      boyfriend:{
        name: "Tom",
        gg: "18cm",
        money: 9999999
      }
    }
  },
  components:{
    Son
  }
}
</script>
<template>
  <h3>Son</h3>
  <p>{{ title }}</p>
  <p>{{ money }}</p>
  <ul>
    <li v-for="(item, index) of girlfriends" :key="index">{{ item }}</li>
  </ul>
  <div>
    <p v-for="(item, index) of boyfriend" :key="index">{{ item }}</p>
  </div>
</template>

<script>
export default {
  data(){
    return{

    }
  },
  props:["title", "money", "girlfriends", "boyfriend"]
}
</script>

3 组件传递Props校验

  props:{
    title:{
      type: String,
      default: "你咋不给我传值呢",
      required: false
    },
    money:{
      type: [Number, String, Array],
      required: false
    },
    girlfriends:{
      type: Array,
      default(){
        return ["母胎solo"]
      },
      required: false
    },
    boyfriend:{
      type: Object,
      default() {
        return {
          name: "xiba",
          gg: "1cm",
          money: -999999
        }
      },
      required: false
    }
  }

可以通过修改props的type属性规定变量类型,可以是一种类型,也可以是多种类型。default属性规定变量的默认值,但是array类型、对象类型不能直接使用default设置,需要换成工厂函数的形式返回默认值。required属性规定变量的可选属性,为true的时候,如果父类不传递值则报错。

注意:props传递过去的数据是只读的,子类无法修改父类传递的数据。

4 组件事件(子传父)

 子:

<template>
  <h3>Son</h3>
  <div>
    <button @click="clickEvent">触发父类</button>
  </div>
</template>

<script>
export default {
  data(){
    return{

    }
  },
  methods:{
    clickEvent(){
      this.$emit("fatherEvent", "传过去的数据")
    }
  }
}
</script>


父:

<template>
  <h3>Parent</h3>
  <Son @fatherEvent="aaa" />
</template>

<script>
import Son from "./Son.vue"
export default {
  data(){
    return{

    }
  },
  components:{
    Son
  },
  methods:{
    aaa(data){
      console.log("触发了", data)
    }
  }
}
</script>

通过自定义事件$emit,实现子类向父类的数据传递。

5 组件事件配合v-model使用(子传父)

子类ComponentB:

<template>
  <h3>ComponentB</h3>
  <input type="text" v-model="search">
</template>

<script>
export default {
  data(){
    return{
      search: ""
    }
  },
  // 侦听器
  watch:{
    search(newValue, oldValue){
      this.$emit("searchEvent", newValue)
    }
  },
  emits: ["searchEvent"]
}
</script>

父类ComponentA:

<template>
  <h3>ComponentA</h3>
  <ComponentB @searchEvent="getSearchValue"/>
  <p>搜索内容:{{ search }}</p>
</template>

<script>
import ComponentB from "./ComponentB.vue"
export default {
  data(){
    return{
      search: ""
    }
  },
  components:{
    ComponentB
  },
  methods:{
    getSearchValue(data){
      this.search = data
    }
  }
}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值