Vue指令

作者: hhaann | 来源:发表于2019-12-24 03:19 被阅读0次

    作用:为HTML元素绑定事件监听

    指令

    1、v-text:解析文本

    <span v-text="text"></span>
    

    等同于

    <span>{{ v-text }}</span>
    

    2、v-html:解析 html 标签。
    html部分

    <p v-html="html"></p>
    

    js部分

    data () {
      return {
        html: '<span>v-html</span>'
      }
    },
    

    3、v-if:条件渲染,通过判断真假来实现显示与隐藏
    html部分

    <p v-if="if"></p>
    

    js部分

    data () {
      return {
        if: true      // 显示 
      }
    },
    

    4、v-else:与 v-if 连用。

    5、v-else-if:与 v-if 连用。
    html部分

    <div v-if="type === 'A'">
      A
    </div>
    <div v-else-if="type === 'B'">
      B
    </div>
    <div v-else-if="type === 'C'">
      C
    </div>
    <div v-else>
      Not A/B/C
    </div>
    

    js部分

    data () {
      return {
        type: 'D'      // Not A/B/C
      }
    },
    

    6、v-once:进入页面时,只渲染一次,不再因为数据变化再进行渲染。
    html部分

    <div class="box">
      <input type="text" v-model="message" />
      <p v-once>{{message}}</p>
      <span>{{message}}</span>
    </div>
    

    js部分

    data () {
      return {
        message: 1234
      }
    },
    

    初始数据为1234,当数据发生变化,span标签的内容会随着变化,而标签p中的 message 重新被渲染。

    7、v-model:用于表单进行双向绑定
    html部分

    <div class="box">
      <input type="text" v-model="message" />
      <p>{{message}}</p>
    </div>
    

    js部分

    data () {
      return {
        message: 1234
      }
    },
    

    当 input 框的内容变化时,p的 message 也会随之变化。

    v-model修饰符

    • .lazy:取代 input 监听 change 事件
    • .number: 输入字符串转为有效的数字
    • .trim:输入首尾空格过滤

    8、v-show:用于切换元素的 display css属性。

    9、v-for:循环指令,对数组进行遍历进行渲染。
    html部分

    <ul>
      <li v-for="(item, index) in list">      // index 为当前索引
        {{index}}:{{item.id}}-{{item.name}}
      </li>
    </ul>
    

    js部分

    data () {
      return {
       list: [
          {id: 1, name: '小明', gender: 'boy'},
          {id: 2, name: '小红', gender: 'girl'},
        ]
      }
    },
    

    最终解析为如下图:


    10、v-bind:动态地绑定一个或多个特性,对页面的数据及时进行更改。
    缩写:":"

    <!-- 绑定一个属性 -->
    <img v-bind:src="imageSrc">        
    // 等同于<img :src="imageSrc">
    

    样式绑定
    class 绑定

    // html 代码
    <div :class = "{ active: isActive, red: isRed }">1111</div>
    
    // js代码
    data () {
      return {
        isActive : true,
        isRed: false
      }
    },
    
    // 渲染结果,因为isRed为false,所以red没被渲染。
    <div class="active">1111</div>
    

    style 绑定

    <p :style="{color: 'red', fontSize: '18px'}">11111111</p>
    
    <!-- 或者为 -->
    <div id="box">
      <p :style="{color: c, fontSize: fS}">11111111</p>
    </div>
    // js代码
    data () {
      c: "red",
      fS: "18px"
    }
    

    11、v-on:绑定事件监听器。简写:“@”

    <!-- html部分 -->
    <button @click="doThis">点击</button>
    
    <!-- js部分 -->
    export default {
      data () {
        return {}
      },
      methods: {
        doThis() {
          console.log(123)
        }
      }
    }
    //方法在methods中写
    

    修饰符

    • stop 阻止事件冒泡
    • prevent 阻止默认行为
    • capture 添加事件侦听器,使用事件捕获模式
    • self - 只有当事件在该元素本身触发时才触发事件
    • once - 事件将只会触发一次

    键值修饰符
    v-on:keydown=“”(获取不同键的键值)
    .enter
    .tab
    .delete
    .up
    .down
    .left
    .right

    自定义指令

    1、注册全局自定义组件:

    Vue.directive('指令名称', {
      inserted: function (el, binding) {
      // el 代表使用了此指令的DOM元素,binding 可获取使用了此指令的绑定值
    
      // 代码
      }
    })
    

    2、注册局部指令:

    directives: {
      '指令名称': {
        inserted: function (el, binding) {
          // 代码
        }
      }
    }
    

    3、使用自定义指令:

    • 引用指令时,指令名前面加上 v-
    • 直接在元素上在使用即可 :v-指令名='表达式'

    例子:

    <template>
      <div class="box">
        <div class="directive">
          <input type="text" v-auto-focus v-colorchange>
          <div class="box" v-fontcolor v-fontcolorsec>
            hello
          </div>
        </div>
      </div>
    </template>
    
    <script>
    import Vue from 'vue'
    export default {
      data () {
        return {}
      },
    // 局部定义
      directives: {
        'auto-focus': {
          inserted: function (el, binging) {
            // 逻辑代码
            el.focus()
          }
        },
        'fontcolor': {
          inserted: function (el, binding) {
            el.style.color = 'red';
            el.style.fontSize = '40px';
          }
        },
        'fontcolorsec': {
          inserted: function (el, binding) {
            el.style.color = 'blue';
          }
        }
      },
    }
    // 全局定义
    Vue.directive('colorchange', {
      inserted: function (el, binding) {
        el.style.background = 'red';
      }
    })
    </script>
    

    效果图:


    相关文章

      网友评论

          本文标题:Vue指令

          本文链接:https://www.haomeiwen.com/subject/mpwtoctx.html