vue自定义指令、过滤器

vue自定义指令、过滤器


vue自定义指令

  • 回顾
    vue指令 : 扩展了html标签属性功能
    使用方法 属性写法 v-属性名=“值”
  • 自定义指令
    1 全局
    Vue.directive(“指令名”,{ 钩子函数 })
    Vue.directive(“指令名”,{
    bind(){ },
    inserted(el,binding){ },一般使用inserted
    update(){ },
    unbind(){ }
    })
    2 局部 只能在注册的组件中使用
    let Home = {
    direcitves:{
    指令名:{钩子函数}
    }
    }

全局

例1 、自定义指令------自动获取焦点

<body>
 <div id="app">
    <input type="text" v-focus="100"> 
 </div>
<script>
  Vue.directive("focus",{
    inserted(el,binding){
      console.log(el);//此时的el是input这个标签
      el.focus();
      console.log(binding)//此时的binding是对象
      /*
      {name: "focus", rawName: "v-focus", value: 100, expression: "100", modifiers: {…}, …}
      */
    }
  })
  let vm = new Vue({
    el:'#app',
    data: { 
    }
  })
</script> 

例2 自定义指令 -----回到顶部

//css代码
 <style>
    button{
      position:fixed;
      bottom:100px;
      right:50px;
      display: none;
    }
  </style>
 // 布局
<body  style="height:2000px">
  <div id="app">
    <button v-scroll="1000">回到顶部</button> 
  </div>
</body>
//js代码
<script>
  Vue.directive("scroll",{
    inserted(el,binding){
      //获取传入的值 即binding.value
      var scrollTop = binding.value;
      //绑定事件(给window)
      window.onscroll = function(){
        // 获取滚动条滚动距离
        var sTop = document.documentElement.scrollTop||document.body.scrollTop;
        // 将滚动距离与传入的值作比较
        // 滚动距离>传入的值   button显示 否则隐藏
        if(sTop>scrollTop){
          el.style.display="block"
        }else{
          el.style.display="none"
        }
      }
      // 给按钮绑定事件
      el.onclick = function(){
        // window.scrollTo(0,0)
        document.documentElement.scrollTop=document.body.scrollTop=0
      }
    },
    //用于提高性能
    unbind() {
      //如果在inserted里面创建了定时器、或者绑定了全局事件  则需要在这里清除定时器、解绑全局事件
      window.onscroll = null
    }
  })
  let vm = new Vue({
    el:'#app',
    data: { 
    }
  })
</script>  

局部

只能在当前实例上使用focus这个指令

  let Home = {
    directives:{
      focus: {
        inserted(el,binding){
        }
      },
      unbind() { 
      }
    }
  }

过滤器

主要用于模板中,对模板中渲染的数据做一层过滤(对数据做一层简单的修改再输出)

全局

 <div id="app">
    {{ num | currency}}  // 页面显示  ¥107
  </div>
<script>
  // 定义过滤器 给num自动加¥
  Vue.filter("currency",(v)=>{
    return "¥"+v;
  })
  let vm = new Vue({
    el:'#app',
    data: { 
      num:107
    }
  })
</script> 

局部

组件的filters属性写过滤器


let vm = new Vue({
    el:'#app',
    data: { 
      num:107
    },
    filters: {
      currency:(v)=>{
        return "¥"+v;
      }
    }
  })

带默认值的过滤器

<body  style="height:2000px">
  <div id="app">
    {{ num | currency}}  //没传值  页面显示 ¥107
    {{ num| currency("$")}} //传值  页面显示 $107
  </div>
<script>
  let vm = new Vue({
    el:'#app',
    data: { 
      num:107
    },
    filters: {
      currency:(v,sign="¥")=>{
        return sign+v;
      }
    }
  })
</script> 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值