vue组件

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <!-- 组件注册成功后,可以直接使用组件名作为标签 -->
    <com></com>

  </div>
  <script>
    // 组件配置对象
    const com = {
      template: `

      `
    }
    
    // 1 全局注册
    // Vue.component('自定义组件名', com)

    // 2 局部注册(局部注册需要在对应的组件中进行注册)
    const app = new Vue({
      el: '#app',
      components: {
        // 自定义组件名: 组件配置对象
        // com: com
        com
      }
    })

  </script>
</body>
</html>
组件之间的通信
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <!-- <child :a="2"></child> -->
    <!-- <child a="2" b="3" c="数据"></child> -->
    <child :msg="msg" @update:msg="getMsg"></child> 
    <child @click="函数"></child>
    <!-- <p a="1"></p> -->
  </div>
  <script src="./vue.js"></script>
  <script>
    /* 
      Vue中组件关系分为以下两种
        父子
        非父子
      
      由此得到三种通信方式
        父 -> 子
          只要子组件标签上有属性,那么在子组件中就一定能接收

          数据是由父组件传向子组件的
          父组件 传数据
            找到父组件模板中的子组件标签
            在子组件标签上添加属性=属性值
              prop名字="值"
              <子标签 a="1"></子标签>
          
          子组件 接收数据
            找到子组件的组件配置对象,
            添加props属性
              props: ['prop名字1', 'prop名字2']
              props: {
                prop名字1: 类型
              }
            prop当作data使用即可

        子 -> 父
          只要组件标签上绑定了事件,那么这个事件一定是自定义事件(想要让自定义事件触发,就必须在子组件的相关操作中触发这个事件)。如果我们想要在组件上绑定原生事件
              @click.native="函数"

          子组件触发
            需要在子组件中的对应元素上绑定原生事件
            在组件中的methods里添加对应的事件函数
            在对应事件函数中触发自定义事件
          父组件接收
            找到父组件模板中的子组件标签
            在子组件标签上绑定自定义事件
              <子组件标签 @自定义事件="父methods中函数"></子组件标签>
            在父组件methods中添加函数
              methods: {
                函数 (data) {
                  data就是子组件中传递过来的数据
                }
              }
            
        非父子通信
          需要一个公共的实例对象
          const bus = new Vue()

          需要传值的组件中
              bus.$emit('自定义事件', 数据)

          需要接受值的组件中
              bus.$on('自定义事件', data => {
                data就是上面的数据
              })


    */  
    
    const child = {
      template: `
        <div>
          子组件
          <button @click="changeMsg">按钮</button>
          {{typeof a}}
          {{b}}
          {{msg}}
        </div>
      `,
      props: ['a', 'b', "msg"],
      methods: {
        changeMsg () {
          // this.$emit('自定义事件名', '要传递的数据')
          this.$emit('update:msg', '子组件中传递过去的数据')
        }
      }
    }
    Vue.component('child', child)

    const app = new Vue({
      el: '#app',
      data: {
        msg: "父组件中的数据"
      },
      methods: {
        getMsg (data) {
          console.log(data)
          this.msg = data
        }
      }
    })
  </script>
</body>
</html>

 

posted @ 2018-12-20 19:35  宝2333  阅读(159)  评论(0编辑  收藏  举报