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


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.