我是靠谱客的博主 顺利小笼包,最近开发中收集的这篇文章主要介绍vue 父子组件传值父向子组件传值 子向父组件传值:代码如下:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

父向子组件传值

子组件的props写成驼峰命名时的写法稍有不同

 

 子向父组件传值:代码如下:

<body>

<!--父组件模板-->
<div id="app">
  <cpn @item-click="cpnClick"></cpn>
</div>

<!--子组件模板-->
<template id="cpn">
  <div>
    <button v-for="item in categories"
            @click="btnClick(item)">
      {{item.name}}
    </button>
  </div>
</template>

<script src="../js/vue.js"></script>
<script>

  // 1.子组件
  const cpn = {
    template: '#cpn',
    data() {
      return {
        categories: [
          {id: 'aaa', name: '热门推荐'},
          {id: 'bbb', name: '手机数码'},
          {id: 'ccc', name: '家用家电'},
          {id: 'ddd', name: '电脑办公'},
        ]
      }
    },
    methods: {
      btnClick(item) {
        // 发射事件: 自定义事件 注意这里边的父组件的item-click不嫩写成驼峰的形式,但是在脚手架中是可以写成itemClick的形式的
        this.$emit('item-click', item)
      }
    }
  }

  // 2.父组件
  const app = new Vue({
    el: '#app',
    data: {
      message: '你好啊'
    },
    components: {
      cpn
    },
    methods: {
      cpnClick(item) {
        console.log('cpnClick', item);
      }
    }
  })
</script>

</body>

效果:

可以看出来点击后就有效果

通过watch监听属性实现双向绑定:最终结果是对v-model的实现方式的深度练习

<body>
<div id="app">
  <cpn :number1="num1"
       :number2="num2"
       @num1change="num1change"
       @num2change="num2change"/>
</div>

<template id="cpn">
  <div>
    <h2>props:{{number1}}</h2>
    <h2>data:{{dnumber1}}</h2>
    <input type="text" v-model="dnumber1">
    <h2>props:{{number2}}</h2>
    <h2>data:{{dnumber2}}</h2>
    <input type="text" v-model="dnumber2">
  </div>
</template>

<script src="../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      num1: 1,
      num2: 0
    },
    methods: {
      num1change(value) {
        this.num1 = parseFloat(value)
      },
      num2change(value) {
        this.num2 = parseFloat(value)
      }
    },
    components: {
      cpn: {
        template: '#cpn',
        props: {
          number1: Number,
          number2: Number,
          name: ''
        },
        data() {
          return {
            dnumber1: this.number1, // v-model改变不了this.number1的值
            dnumber2: this.number2
          }
        },
        watch: {
          dnumber1(newValue) {
            // 这个值的改变也是让watch下的dnumber2被监听到
            this.dnumber2 = newValue * 100;
            // 这个的改变是让父组件的this.num1的值改变也就是让this.number1的值改变
            this.$emit('num1change', newValue);
          },
          dnumber2(newValue) {
            // 有一点就是为啥不会陷入死循环
            this.number1 = newValue / 100;
            this.$emit('num2change', newValue);
          }
        }
      }
    }
  })
</script>
</body>

 

 

 

最后

以上就是顺利小笼包为你收集整理的vue 父子组件传值父向子组件传值 子向父组件传值:代码如下:的全部内容,希望文章能够帮你解决vue 父子组件传值父向子组件传值 子向父组件传值:代码如下:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部