码迷,mamicode.com
首页 > 其他好文 > 详细

vue-04-组件

时间:2018-10-06 19:49:38      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:lis   添加   input   default   ems   method   imp   接受   ini   

1, 介绍

vue最强大的功能, 可以扩展html元素, 封装可充用的代码

在较高的层面, 组件是自定义元素, vue的编译器为他添加特殊功能, 在有些情况下, 组件也可以表现为用 ls 特性进行扩展了html元素

所有的vue组件同时也都是vue的实例, 所以可接受相同的选项对象(除了一些根级特有的选项) 并提供相同的生命周期的钩子

2, 单文件组件

1), template

2), script

3), style

3部分组成

3, 子父级组件

1), 使用

<template>
    <div>
      <p > 这儿是 子组件 </p>
    </div>
</template>

<script>
    export default {
        name: "b02_son"
    }
</script>

<style scoped>

</style>

父组件中接受

<script>
// 导入子组件
import b02_son from ./b02_son

  // 必须导出, 外部才可以访问
  export default {
    name: "b01_component",
    components: {
      b02_son
    }
  }
</script>

然后引用

 <div>
      <!--导入子组件-->
      <b02_son/>
    </div>

2, 子父组件通讯

父 -> 子  传递数据

子 -> 父  相应事件

1), 父到子

使用props 进行传递

使用 v-bind进行传递, 可简写为  : 的形式

父类中

<b02_son :title="msg" :lifemsg="lifemsg" :num="num" :obj="obj"/>

data() {
return {
msg: "传递给子的数据",
lifemsg: "hello",
num: 10,
obj: {
name: ‘vini‘,
age: 18
}
}
},

可传递动态数据, 通过v-mode绑定

<!--导入子组件-->
      <input type="text" v-model.lazy="lifemsg">

      <b02_son :title="msg" :lifemsg="lifemsg" :num="num" :obj="obj"/>
      <button @click="changeMsg">button ..</button>

 

子类中接受

使用props 进行接受

1), 可限定类型, 可同时限制多个类型

2), 可设置默认值

3), 可设置必须

4), 返回为对象形式的话, 必须用function-return的形式

props: {
      // 增加必须项
      title: {
        type: String,
        required: true,
      },

      // 支持多种类型
      lifemsg: [String, Number],

      // 带有默认值
      num: {
        type: Number,
        default: 5,
      },

      // obj 接收
      obj: {
        type: Object,
        default: function () {
          return {
            name: lisa,
            age: 27
          }
        }
      }

    }

 2), 子到父数据传递

需要 @click 并且以函数的形式传递

子中进行绑定和传递, 使用emit传递给父

<template>
    <div>
      <div>
        子给父传递数据
      </div>

      <div>
        <button @click="sendMsg">传递数据</button>
      </div>

    </div>
</template>

<script>
    export default {
        name: "b03_emit",
      data() {
          return {
            msg: "子组件数据",
          }
      },
      // 绑定emit
      methods: {
          sendMsg(event) {
            // key, value
            this.$emit("sendMsg", this.msg)
          }
      }
    }
</script>

<style scoped>

</style>

父中进行接受, 也以 函数 的形式进行接受

<!--子给父传递数据-->
    <div>
      <b03_emit @sendMsg="getMsg"/>


    </div>

methods: {
getMsg(data) {
this.msg = data;
}
}

2), 父中的数据传递给子, 子计算后返回给父

<!--子给父传递数据-->
    <div>
      <b03_emit @sendAndCompute="sendAndGet" :num="getNum" />
      <p> {{ result }}</p>
    </div>

script: 

data() {
      return {
        result: 10,
      }
    },
    computed: {
      getNum() {
        return this.result - 0;
      }
    },
    methods: {
      sendAndGet(data) {
        console.log("..." + data)
        this.result = data;
      }
    }

子中: 

 <div>
        <!--<button @click="sendMsg">传递数据</button>-->
        <button @click="sendAndCompute"> 计算数据 </button>
      </div>
// 绑定emit, 返回给父
      methods: {
        sendAndCompute(event) {
          this.$emit("sendAndCompute", this.computeNum)
        }
      },
      // 接受来自父的数据
      props: {
          num: {
            type: Number,
            required: true,
          }
      },
      // 计算
      computed: {
        computeNum() {
          return this.num * 3
        }
      }

 

vue-04-组件

标签:lis   添加   input   default   ems   method   imp   接受   ini   

原文地址:https://www.cnblogs.com/wenbronk/p/9681794.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!