520 vue父组件向子组件传递:props基本用法,props数据验证,props中的驼峰标识

props基本用法


props数据验证

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>

<body>

  <div id="app">
    <!--<cpn v-bind:cmovies="movies"></cpn>-->
    <!--<cpn cmovies="movies" cmessage="message"></cpn>-->
    <!-- 通过自定义属性,父组件将要传递的数据,传递给子组件 -->
    <cpn :cmessage="message" :cmovies="movies"></cpn>
  </div>

  <template id="cpn">
    <div>
      <ul>
        <li v-for="item in cmovies">{{item}}</li>
      </ul>
      <h2>{{cmessage}}</h2>
    </div>
  </template>

  <script src="../js/vue.js"></script>
  <script>
    // 父传子: props
    const cpn = {
      template: '#cpn',
      // 子组件通过 props 配置项,来指定要接收的数据
      // props: ['cmovies', 'cmessage'],
      props: {
        // 1.类型限制
        // cmovies: Array,
        // cmessage: String,

        // 2.提供一些默认值, 以及必传值
        cmessage: {
          // 类型要和父组件传递的数据类型一致,否则报错
          type: String,
          default: 'aaaaaaaa',
          required: true
        },
        // 类型是对象或者数组时, 默认值必须是一个函数
        cmovies: {
          type: Array,
          default() {
            return []
          }
        }
      },
    }

    const app = new Vue({
      el: '#app',
      data: {
        message: '你好啊',
        movies: ['海王', '海贼王', '海尔兄弟']
      },
      components: {
        cpn
      }
    })
  </script>

</body>

</html>

组件通信-父传子(props中的驼峰标识)

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>

<body>

  <div id="app">
    <!-- 要用段横杆,不能写成cInfo,浏览器会把所有的标签名、标签属性名识别为小写 -->
    <cpn :c-info="info" :child-my-message="message" v-bind:class></cpn>
  </div>

  <template id="cpn">
    <div>
      <h2>{{cInfo}}</h2>
      <h2>{{childMyMessage}}</h2>
    </div>
  </template>

  <script src="../js/vue.js"></script>
  <script>
    const cpn = {
      template: '#cpn',
      // props中的属性可以用驼峰
      props: {
        cInfo: {
          type: Object,
          default() {
            return {}
          }
        },
        childMyMessage: {
          type: String,
          default: ''
        }
      }
    }

    const app = new Vue({
      el: '#app',
      data: {
        info: {
          name: 'why',
          age: 18,
          height: 1.88
        },
        message: 'aaaaaa'
      },
      components: {
        cpn
      }
    })
  </script>

</body>

</html>
原文地址:https://www.cnblogs.com/jianjie/p/13535851.html