Vue JS में, vue उदाहरण के अंदर एक विधि से फ़िल्टर को कॉल करें


86

कहो मेरे पास एक Vue उदाहरण है जैसे:

new Vue({
    el: '#app',

    data: {
        word: 'foo',
    },

    filters: {
       capitalize: function(text) {
           return text.replace(/(?:^|\s)\S/g, function(a) { return a.toUpperCase(); });
       }
    },

    methods: {
        sendData: function() {
            var payload = this.$filters.capitalize(this.word); // how?
        }
    }
}

मैं आसानी से इस तरह से एक टेम्पलेट में फिल्टर का उपयोग कर सकते हैं:

<span>The word is {{ word | capitalize }}</span>

लेकिन मैं इस फ़िल्टर का उपयोग आवृत्ति विधि या संगणित संपत्ति के भीतर से कैसे कर सकता हूं? (स्पष्ट रूप से यह उदाहरण तुच्छ है और मेरे वास्तविक फ़िल्टर अधिक जटिल हैं)।

जवाबों:


202
this.$options.filters.capitalize(this.word);

Http://vuejs.org/api/#vm-options देखें


13
आप सुंदरी!!
— मेरे विकास

1
यह मेरे लिए एक Nuxt संदर्भ में काम नहीं कर रहा है। this.$optionsकोई filtersसंपत्ति नहीं है ।
— जे बिएनवेनु

5
NuxtJS उपयोग मेंthis.$root.$options.filters
— इमानुएल एस

28

इसी से मेरा काम बना है

  1. फ़िल्टर को परिभाषित करना

    //credit to @Bill Criswell for this filter
    Vue.filter('truncate', function (text, stop, clamp) {
        return text.slice(0, stop) + (stop < text.length ? clamp || '...' : '')
    });
    
  2. फ़िल्टर का उपयोग करना

    import Vue from 'vue'
    let text = Vue.filter('truncate')(sometextToTruncate, 18);
    

इस उत्तर में दोष पर भरोसा कर रहा है import Vue from 'vue'और एक नया चर बना रहा है जब एक पहले से मौजूद है।
— जे बिएनवेनु

3

तुम एक vuexसहायक घटक के तरीके वस्तु में विश्व स्तर पर पंजीकृत फिल्टर नक्शा करने के लिए एक सहायक समारोह की तरह बना सकते हैं :

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

उपयोग:

import { mapFilters } from './map-filters';

export default {
    methods: {
        ...mapFilters(['linebreak'])
    }
}

1

अगर आपका फ़िल्टर कुछ इस तरह है

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

यह उत्तर है

this.$options.filters.plural('item', count, 'items')

0

मॉरिस उत्तर को पूरक करने के लिए, यह एक ऐसी फ़ाइल का एक उदाहरण है जिसे मैं आमतौर पर फ़िल्टर को अंदर डालने के लिए उपयोग करता हूं, आप इस पद्धति का उपयोग करके किसी भी दृश्य में उपयोग कर सकते हैं।

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, '.')
})

वैश्विक दायरे में चीजों को घोषित करना कभी भी अच्छा विचार नहीं है, जो तब तक windows.Vueऔर windows.momentजब तक आपको बिल्कुल नहीं करना है, बिना किसी अन्य तरीके के।
— जे। केओ।

इस विषय के लिए बिल्कुल भी सच नहीं है! एक परियोजना के अनुसार विश्व स्तर पर परिभाषित फिल्टर एक अच्छा नियम है!
— रियल्टीबो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.