ভি-মডেল পরিবর্তিত হলে কীভাবে একটি ইভেন্ট ফায়ার করবেন?


95

আমি foo()ফাংশনটি দিয়ে গুলি চালানোর চেষ্টা করছি @clickতবে আপনি দেখতে পাচ্ছেন, ইভেন্টটি সঠিকভাবে ফায়ার করতে দুবার রেডিও বোতাম টিপতে হবে। আপনি দ্বিতীয়বার চাপলে কেবল মানটি ধরুন ...

@clickযখন v-model(এসআর স্ট্যাটাস) পরিবর্তন হয় কেবলমাত্র ইভেন্টটিকেই আমি আগুন না দিয়ে ইভেন্টটি ফায়ার করতে চাই ।

এখানে আমার ফিডল:

http://fiddle.jshell.net/wanxe/vsa46bw8/


4
ফিডাল লিঙ্কটি আর কাজ করছে না।
ফ্রেনকিবি

কল করার অভিপ্রায়টি যদি foo()নন টেমপ্লেট পরিবর্তন করতে হয় তবে একটিwatcher
স্যাকশাম

কেন প্রশ্নে কোড প্রয়োজন তা এটি একটি দুর্দান্ত উদাহরণ । সম্ভব হলে এটি পুনরুদ্ধার করুন এবং এটি এখানে দেখান।
ইশারউড

আমি আশা করি আমি প্রশ্নের কোডটি পুনরুদ্ধার করতে পারতাম, তবে এটি 5 বছর আগেই ছিল ... ভাগ্যক্রমে আমাদের ভাল উত্তর রয়েছে
জানু

উত্তর:


79

এটি ঘটে কারণ clickরেডিও বোতামের মান পরিবর্তনের আগে আপনার হ্যান্ডলারটি গুলি চালায়। changeপরিবর্তে আপনার ইভেন্টটি শুনতে হবে:

<input 
  type="radio" 
  name="optionsRadios" 
  id="optionsRadios2" 
  value=""
  v-model="srStatus" 
  v-on:change="foo"> //here

এছাড়াও, নিশ্চিত হয়ে নিন যে আপনি সত্যিই foo()প্রস্তুতকে কল করতে চান ... মনে হচ্ছে সম্ভবত আপনি এটি করতে চান না।

ready:function(){
    foo();
},

আপনি কিভাবে স্লাইডারগুলি পরিচালনা করবেন?
রই

ডকুমেন্টেশনে তালিকাভুক্ত উপলভ্য ইভেন্টগুলি কোথায়। আমি এটি খুঁজে পাচ্ছি না?
toraman

এটি কেবলমাত্র স্ট্যান্ডার্ড জাভাস্ক্রিপ্ট ইভেন্ট যা আপনি এখানে পাবেন: ডেভেলপার.মোজিলা.আর.ইন.ইউএস
ডকস / ওয়েব

ধন্যবাদ! তবে রেডি: ফাংশন আমার পক্ষে কাজ করে নি। পরিবর্তে, পদ্ধতি: {foo () {// কিছু করুন}}
ভিন্স বানজন

এছাড়াও নোট করুন যে আপনি যদি কাস্টম ভিউ উপাদান (একক ফাইল উপাদান) "ভি-অন: পরিবর্তন" ইভেন্টগুলি নিবন্ধিত করতে চান তবে "ভি-অন: ইনপুট" পরিবর্তে ব্যবহার করা উচিত।
আন্দ্রেস বিয়ার্জ

99

আপনি v-onনির্দেশিকাগুলি সরিয়ে বাস্তবে এটি সরল করতে পারেন :

<input type="radio" name="optionsRadios" id="optionsRadios1" value="1" v-model="srStatus">

এবং watchপরিবর্তনটি শোনার জন্য পদ্ধতিটি ব্যবহার করুন:

new Vue ({
    el: "#app",
    data: {
        cases: [
            { name: 'case A', status: '1' },
            { name: 'case B', status: '0' },
            { name: 'case C', status: '1' }
        ],
        activeCases: [],
        srStatus: ''
    },
    watch: {
        srStatus: function(val, oldVal) {
            for (var i = 0; i < this.cases.length; i++) {
                if (this.cases[i].status == val) {
                    this.activeCases.push(this.cases[i]);
                    alert("Fired! " + val);
                }
            }
        }
    }
});

4
আপনি স্বয়ংক্রিয়ভাবে কোনও মডেল পরিবর্তন দেখতে পারেন? উদাহরণস্বরূপ একাধিক ইনপুট সহ একটি ফর্মের জন্য যা সমস্ত দেখার দরকার?
এরিক বুরেল

@ এরিকবুরেল আমি জানি এটি পুরানো, তবে উত্তরটি হ'ল না। সমস্ত ক্ষেত্রের জন্য আবদ্ধ পুরো ডেটা অবজেক্টটি আপনি দেখতে পারবেন না, আপনাকে সেই ক্ষেত্রের অনেকগুলি ক্ষেত্র সহ ফর্মগুলিতে বড় রেকর্ডের জন্য এই পদ্ধতিকে স্বতন্ত্রভাবে এই পদ্ধতিটিকে সমস্যাযুক্ত করে তোলা উচিত object
জনসি

4
@ এরিকবুরেল আসলে 'সত্য' এ সেট করা 'গভীর' সম্পত্তি সহ নেস্টেড বস্তুগুলি আপনি দেখতে পারেন -> vuejs.org/v2/api/#watch
সানবেন

29

ভ্যু 2: যদি আপনি কেবল ইনপুট ব্লারটিতে পরিবর্তন সনাক্ত করতে চান (উদাহরণস্বরূপ এন্টার টিপুন বা অন্য কোথাও ক্লিক করুন) করুন (আরও তথ্য এখানে )

<input @change="foo" v-model... >

আপনি যদি একক অক্ষরের পরিবর্তনগুলি (ব্যবহারকারী টাইপ করার সময়) ব্যবহার সনাক্ত করতে চান

<input @keydown="foo" v-model... >

আপনি ব্যবহার @keyupএবং @inputইভেন্ট করতে পারেন । আপনি যদি অতিরিক্ত প্যারামিটারগুলি টেমপ্লেটে ব্যবহার করতে চান তবে @keyDown="foo($event, param1, param2)"। নীচের তুলনা (সম্পাদনাযোগ্য সংস্করণ এখানে )


কীডাউন 'ব্যাকস্পেস' চাপ দিয়ে কাজ করছে না। সুতরাং @ ইনপুট
পেরেটজ 30

এই @keyDown ঝাঁকুনিতে আমরা দেখতে পাই যে ব্যাকস্পেস jsfiddle.net/rLzm0f1q এর সাথে কাজ করে (তবে আমি @inputএটি খারাপ বা ভাল বলি না )
কামিল কিয়েসজেউস্কি

24

আপনার ব্যবহার করা উচিত @input:

<input @input="handleInput" />

@input ব্যবহারকারী যখন ইনপুট মান পরিবর্তন করে তখন অগ্নিসংযোগ করে।

@change ব্যবহারকারী যখন মান এবং আনফোকস ইনপুট পরিবর্তন করে তখন আগুন লাগে (উদাহরণস্বরূপ বাইরে কোথাও ক্লিক করা হয়েছে)

আপনি এখানে পার্থক্যটি দেখতে পারেন: https://jsfiddle.net/posva/oqe9e8pb/


@ চিহ্নের পরিবর্তে আপনি কী ব্যবহার করতে পারেন? এ নিয়ে কোথাও কোনও নিয়ম লেখা আছে? আমি এটি জিজ্ঞাসা করছি কারণ আমার ব্যাকএন্ডে, @ চিহ্নটি অন্য কোনও কিছুর জন্য সংরক্ষিত।
ফ্রেনকিবি

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