ভ্যু জেএস-এ, মান উদাহরণের অভ্যন্তরে কোনও পদ্ধতি থেকে একটি ফিল্টার কল করুন


95

বলুন আমার এর মতো ভ্যূনু উদাহরণ রয়েছে:

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>

তবে আমি কীভাবে কোনও উদাহরণ পদ্ধতি বা গণনা করা সম্পত্তি থেকে এই ফিল্টারটি ব্যবহার করতে পারি? (স্পষ্টতই এই উদাহরণটি তুচ্ছ এবং আমার প্রকৃত ফিল্টারগুলি আরও জটিল)।

উত্তর:


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

Http://vuejs.org/api/#vm-options দেখুন


14
তুমি ... সুন্দর !!
— আমার উন্নয়ন

4
এটি আমার জন্য একটি অনুগ্রহ প্রসঙ্গে কাজ করছে না। this.$optionsএকটি নেই filtersসম্পত্তি।
— জে বিভেভেনু

6
নেক্সটজেএস-এ ব্যবহার করুনthis.$root.$options.filters
— ইমানুয়েল এস।

31

এটিই আমার পক্ষে কাজ করেছিল

  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'এবং ইতিমধ্যে বিদ্যমান থাকলে একটি নতুন ভেরিয়েবল তৈরি করে।
— জে বিয়েনভেনু

4

আপনি কোনও 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'])
    }
}

4

যদি আপনার ফিল্টারটি এরকম কিছু হয়

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

এই উত্তর

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

0

মরিস উত্তরটির পরিপূরক করতে, এটি সাধারণত একটি ফিল্টার insideোকাতে আমি সাধারণত ব্যবহার করি এমন একটি ফাইলের উদাহরণ, আপনি এই পদ্ধতিটি ব্যবহার করে যে কোনও দৃষ্টিতে ব্যবহার করতে পারেন।

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না করে অন্য কোনও উপায় ছাড়াই।
— জে.কো

এই বিষয়গুলির জন্য মোটেই সত্য নয়! প্রতি প্রকল্পে বিশ্বব্যাপী সংজ্ঞায়িত ফিল্টারগুলি একটি ভাল নিয়ম!
— রিয়েলট্যাবো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.