zoukankan      html  css  js  c++  java
  • vue-04-组件

    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
            }
          }
  • 相关阅读:
    python程序2:购物车
    挖矿病毒watchbog处理过程
    docker从入门到精通再到放弃
    python基础应用---列表应用
    python基本应用--三元应用
    由java派生出来的证书错误
    python基础应用---格式化输出
    test04
    在博客中模拟Typora中的Dark风格
    Test03 TextBox
  • 原文地址:https://www.cnblogs.com/wenbronk/p/9681794.html
Copyright © 2011-2022 走看看