In Vue JS, call a filter from a method inside the vue instance

后端 未结 5 1685
自闭症患者
自闭症患者 2020-12-23 14:24

Say I have a Vue instance like so:

new Vue({
    el: \'#app\',

    data: {
        word: \'foo\',
    },

    filters: {
       capitalize: function(text) {         


        
相关标签:
5条回答
  • 2020-12-23 14:43

    This is what worked for me

    1. Defining filter

      //credit to @Bill Criswell for this filter
      Vue.filter('truncate', function (text, stop, clamp) {
          return text.slice(0, stop) + (stop < text.length ? clamp || '...' : '')
      });
      
    2. Using filter

      import Vue from 'vue'
      let text = Vue.filter('truncate')(sometextToTruncate, 18);
      
    0 讨论(0)
  • 2020-12-23 14:52

    if your filter is something like this

    <span>{{ count }} {{ 'item' | plural(count, 'items') }}</span>  
    

    this is the answer

    this.$options.filters.plural('item', count, 'items')
    
    0 讨论(0)
  • 2020-12-23 14:58

    To complement Morris answer, this is an example of a file I normally use to put filters inside, you can use in any view using this method.

    var Vue = window.Vue
    var moment = window.moment
    
    Vue.filter('fecha', value => {
      return moment.utc(value).local().format('DD MMM YY h:mm A')
    })
    
    Vue.filter('ago', value => {
      return moment.utc(value).local().fromNow()
    })
    
    Vue.filter('number', value => {
      const val = (value / 1).toFixed(2).replace('.', ',')
      return val.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.')
    })
    Vue.filter('size', value => {
      const val = (value / 1).toFixed(0).replace('.', ',')
      return val.toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.')
    })
    
    0 讨论(0)
  • 2020-12-23 15:00
    this.$options.filters.capitalize(this.word);
    

    See http://vuejs.org/api/#vm-options

    0 讨论(0)
  • 2020-12-23 15:00

    You can create a vuex like helper function to map globally registered filters into the methods object of a vue component:

    // map-filters.js
    export function mapFilters(filters) {
        return filters.reduce((result, filter) => {
            result[filter] = function(...args) {
                return this.$options.filters[filter](...args);
            };
            return result;
        }, {});
    }
    

    Usage:

    import { mapFilters } from './map-filters';
    
    export default {
        methods: {
            ...mapFilters(['linebreak'])
        }
    }
    
    0 讨论(0)
提交回复
热议问题