• Vue 插槽和自定义事件


    官方给出prop例子

      props: ['initialCounter'],
            data: function () {
        return {
          counter: this.initialCounter
        }
      }
    

    自定义事件

    • 不同于组件和 prop,事件名不存在任何自动化的大小写转换。而是触发的事件名需要完全匹配监听这个事件所用的名称。举个例子,如果触发一个 camelCase 名字的事件:

      this.$emit('myEvent')

    自定义组件的 v-model

    • 一个组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件,但是像单选框、复选框等类型的输入控件可能会将 value attribute 用于不同的目的。model 选项可以用来避免这样的冲突:

        Vue.component('base-checkbox', {
        model: {
          prop: 'checked',
          event: 'change'
        },
        props: {
          checked: Boolean
        },
        template: `
          <input
            type="checkbox"
            v-bind:checked="checked"
            v-on:change="$emit('change', $event.target.checked)"
          >
        `
      })
      
    • 现在在这个组件上使用 v-model 的时候:

      <base-checkbox v-model="lovingVue"></base-checkbox>
      
    • 这里的 lovingVue 的值将会传入这个名为 checked 的 prop。同时当 触发一个 change 事件并附带一个新的值的时候,这个 lovingVue 的 property 将会被更新。

    插槽的使用

      <!--v-bind:rzk的意思是  {message遍历出来的值需要绑定到props里面  然后通过模板显示出来}-->
      <!--组件: 传递给组件中的值,  通过props 去接收-->
      <div id="app">
          <pig v-for="m in message" v-bind:rzk="m"></pig>
      </div>
      <!--导入vue-->
      <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
      <script>
          Vue.component("pig",{
              props: ['rzk'],<!--接收绑定的值-->
              template: '<li>{{rzk}}</li>'<!--通过props接收到的值传给li里面-->
          });
    
          //通过new Vue 可以声明全局变量,new返回的对象就是应用对象
          var vm = new Vue({
              el: "#app",
              data: {
                  message: ["hello,vue!","Java","Mysql"]
              }
          });
      </script>
    

    示例

      <!DOCTYPE html>
      <html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
      <head>
          <meta charset="UTF-8">
          <title>Title</title>
      </head>
      <body>
      <div id="app">
          <todo>
              <todo-title slot="todo-title" v-bind:title="title"></todo-title>
              <todo-items slot="todo-items" v-for="(item,index) in todoItems"
                    v-bind:item="item" v-bind:index="index" v-on:remove="removeItems(index)"></todo-items>
          </todo>
      </div>
      <!--导入vue-->
      <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
      <script>
          //slot:插槽
          Vue.component("todo",{
              template:'<div>
                          <slot name="todo-title"></slot>
                          <ul>
                              <slot name="todo-items"></slot>
                          </ul>
                        </div>'
          });
    
          Vue.component("todo-title",{
              props: ['title'],
              template: '<div>{{title}}</div>'
          })
    
          Vue.component("todo-items",{
              props: ['item','index'],
              //模板
              template: '<li>{{index}} -- {{item}} <button @click="remove">删除</button></li>',
              methods: {
                  remove: function (index) {
                      alert("进入")
                      this.$emit('remove',index);
                  }
              }
          })
    
          var vm = new Vue({
              el: "#app",
              data: {
                  title: "Rzk博客",
                  todoItems: ['rzk','MySQL','Java']
              },
              methods: {
                  removeItems: function (index) {
                      console.log("删除" + this.todoItems[index] + "OK");
                      this.todoItems.splice(index,1);//一次删除一个元素
                  }
             }
          });
      </script>
      </body>
      </html>
  • 相关阅读:
    Python拍照加时间戳水印
    python获取微信群和群成员
    python分析统计自己微信朋友的信息
    python输出100以内的质数与合数
    fjutacm 3700 这是一道数论题 : dijkstra O(mlogn) 二进制分类 O(k) 总复杂度 O(k * m * logn)
    poj 2763 Housewife Wind : 树链剖分维护边 O(nlogn)建树 O((logn)²)修改与查询
    hdu 3966 Aragorn's Story : 树链剖分 O(nlogn)建树 O((logn)²)修改与查询
    poj 3694 Network : o(n) tarjan + O(n) lca + O(m) 维护 总复杂度 O(m*q)
    poj 2553 The Bottom of a Graph : tarjan O(n) 存环中的点
    poj 2186 Popular Cows :求能被有多少点是能被所有点到达的点 tarjan O(E)
  • 原文地址:https://www.cnblogs.com/rzkwz/p/12834040.html
Copyright © 2020-2023  润新知