VUE学习

VUE学习----filters(过滤器)方法

2020-11-04  本文已影响0人  扮猪老虎吃

filters

作用:对值进行筛选加工

使用情况

<div>{{message | reverse}}</div>

<div>{{message | addStartEnd('before ',' after')}}</div> //正确写法
<div>{{message | addStartEnd 'before ' ' after'}}</div> //官网写法,存疑

<div>{{message | addstring | addStartEnd('before ',' after')}}</div>
<div>{{message | addstring | reverse }}</div>
按照顺序执行过滤器

官网写法,存疑v-model只能绑定一个变量或对象

<div id="example">
    <input type="text" v-model="msg|currencyDisplay"><br>
    <span>{{msg}}</span>
</div>

filters:{
  currentDisplay: {
      read: function(val) {
        return '$'+val.toFixed(2)
      },
      write: function(val) {
        let number = +val.replace(/[^\d.]/g, '')
        return isNaN(number) ? 0 : parseFloat(number.toFixed(2))
      }
    }
}

正确写法,仍在调试

很遗憾,笔者没有调试成功双向过滤器。官网链接

使用事件实现类似功能,如下:

<template>
  <div id="app">
  <div>
      输入框:<input type="text" @blur="handleFocus" @input="handleInput" v-model="moneyFilters">
      <br>
      <span>Model Value: {{moneyFilter}}</span>
  </div>
</div>
</template>

<script>
export default {
  name: 'App',
  data(){
    return {
      moneyFilters: '0',
      moneyFilter: ''
    }  
  },
  methods:{
    handleInput(e) {
      console.log(e.target.value)
      this.moneyFilter = e.target.value
    },
    handleFocus() {
      this.moneyFilters = `$${Number(this.moneyFilter).toFixed(2)}`
    },
  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

官网写法,存疑

<div>{{message | concat userInfo }}</div>

正确写法

<div>{{message | concat(userInfo)}}</div>

示例说明

<template>
  <div id="app">
    <div>{{message | reverse}}</div>
    <div>{{message | addStartEnd('before ',' after')}}</div>
    <div>{{message | addStartEnd 'before ' ' after'}}</div>
    <div>{{message | addstring | addStartEnd('before ',' after')}}</div>
    <div>{{message | addstring | reverse }}</div>
    <div>{{message | concat(userInfo)}}</div>
    <!-- <div>
      <input type="text" title = "输入金额:" v-model="moneyFilteredHTML"><br>
      <span>{{money}}</span>
    </div> -->
  </div>
</template>

<script>
// import func from '../vue-temp/vue-editor-bridge'
// import HelloWorld from './components/HelloWorld.vue'
export default {
  name: 'App',
  data(){
    return {
      message: 'hello world ',
      userInfo: 'lucky dog',
      money: '',
    }  
  },
  filters:{
    addstring: function(value){
      return value + '!!!'
    },
    reverse: function(value){
      return value.split(' ').reverse().join('-')
    },
    addStartEnd: function(value, begin, end) {
      return begin + value + end
    },
    concat: function(value, str) {
      return value + str
    },
    currentDisplay: {
      read: function(val) {
        return '$'+val.toFixed(2)
      },
      write: function(val) {
        let number = +val.replace(/[^\d.]/g, '')
        return isNaN(number) ? 0 : parseFloat(number.toFixed(2))
      }
    }
  },
  computed: {
    moneyFilteredHTML: {
      get() {
        return this.currentDisplay(this.money)
      },
      set(val) {
        this.money = val
      }
    }
  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>


示例运行结果

-world-hello
before hello world after
hello world
before hello world !!! after
!!!-world-hello
hello world lucky dog
上一篇下一篇

猜你喜欢

热点阅读