ভিউেক্স - গণিত সম্পত্তি "নাম" বরাদ্দ করা হয়েছিল তবে এর কোনও সেটর নেই


118

কিছু ফর্ম বৈধতা সহ আমার একটি উপাদান রয়েছে। এটি একটি মাল্টি স্টেপ চেকআউট ফর্ম। নীচের কোডটি প্রথম পদক্ষেপের জন্য। আমি যাচাই করতে চাই যে ব্যবহারকারী কিছু পাঠ্য প্রবেশ করেছে, তাদের নাম বিশ্বব্যাপী স্টোরে সংরক্ষণ করুন এবং তারপরে পরবর্তী পদক্ষেপে প্রেরণ করুন। আমি ভী- ভ্যালিড এবং ভয়েস ব্যবহার করছি

<template>
<div>
    <div class='field'>
        <label class='label' for='name'>Name</label>
        <div class="control has-icons-right">

            <input name="name" v-model="name" v-validate="'required|alpha'" :class="{'input': true, 'is-danger': errors.has('name') }" type="text" placeholder="First and Last">
            <span class="icon is-small is-right" v-if="errors.has('name')">
                <i class="fa fa-warning"></i>
            </span>
        </div>
        <p class="help is-danger" v-show="errors.has('name')">{{ errors.first('name') }}</p>

    </div>
    <div class="field pull-right">
        <button class="button is-medium is-primary" type="submit" @click.prevent="nextStep">Next Step</button>
    </div>
</div>
</template>

<script>
export default {
    methods: {
        nextStep(){
            var self = this;

            // from baianat/vee-validate
            this.$validator.validateAll().then((result) => {
                if (result) {
                    this.$store.dispatch('addContactInfoForOrder', self);
                    this.$store.dispatch('goToNextStep');
                    return;
                }
            });
        }
    },
    computed: {
        name: function(){
            return this.$store.state.name;
        }
    }
}
</script>

অর্ডার অবস্থা পরিচালনা করতে এবং নামটি রেকর্ড করার জন্য আমার কাছে একটি স্টোর রয়েছে। শেষ পর্যন্ত আমি মাল্টি স্টেপ ফর্ম থেকে সমস্ত তথ্য সার্ভারে প্রেরণ করতে চাই।

export default {
  state: {
    name: '',
  },

  mutations: {
    UPDATE_ORDER_CONTACT(state, payload){
      state.name = payload.name;

    }
  },

  actions: {
    addContactInfoForOrder({commit}, payload) {
      commit('UPDATE_ORDER_CONTACT', payload);
    }
  }
}

আমি এই কোডটি চালানোর সময় আমি একটি ত্রুটি পাই Computed property "name" was assigned to but it has no setter.

আমি কীভাবে নাম ক্ষেত্র থেকে বিশ্বব্যাপী মানটির সাথে বেঁধে রাখতে পারি? আমি এটি স্থির রাখতে চাই যাতে কোনও ব্যবহারকারী কোনও পদক্ষেপ পিছনে ফিরে যায় ("পরবর্তী পদক্ষেপ" ক্লিক করার পরে) তারা এই পদক্ষেপে যে নামটি লিখেছিল তা তারা দেখতে পাবে


4
রায় v-forজেয়ের উত্তর ছাড়াও, দেখে মনে হচ্ছে যেন কোনও সেটার ছাড়াই কোনও গণনে ব্যবহার করা এই সতর্কতাটিকেও ছুঁড়ে দেয়।
jsiegal

উত্তর:


204

আপনি যদি v-modelএকটি গণনা করতে যাচ্ছেন তবে এটির একটি সেটার প্রয়োজন । আপনি আপডেটারের সাথে এটি যা কিছু করতে চান (সেটিকে সম্ভবত এটি লিখুন, এটি $storeবিবেচনা করে আপনার প্রযোজক এটি থেকে কী টানেন) আপনি সেটারে যা করেন।

ফর্ম জমা দেওয়ার মাধ্যমে দোকানে যদি এটি আবার লেখা হয় তবে আপনি চান না v-model, আপনি কেবল সেট করতে চান :value

আপনি যদি কোনও মধ্যবর্তী অবস্থা রাখতে চান, যেখানে এটি কোথাও সংরক্ষণ করা হয়েছে তবে $storeফর্ম জমা দেওয়ার আগ পর্যন্ত উত্সটি ওভাররাইট না করে , আপনার এমন ডেটা আইটেম তৈরি করতে হবে।


42
:valueওভার v-model। ধন্যবাদ!
কনার জোঁক

4
আপনাকে ধন্যবাদ ... আমার [ভ্যু সতর্কতা] স্থির করে দিয়েছেন। আমার কাছে একটি নেভিগেশন ড্রয়ার ছিল যার প্রয়োজন (কেবল পঠনযোগ্য) সত্য / মিথ্যা মান তবে আমি এটিতে একটি ভি-মডেল রেখেছি।
জিএ

32

এটি এমন হতে হবে।

আপনার উপাদান মধ্যে

computed: {
        ...mapGetters({
                nameFromStore: 'name'
            }),
        name: {
           get(){
             return this.nameFromStore
           },
           set(newName){
             return newName
           } 
        }
    }

আপনার দোকানে

export const store = new Vuex.Store({
         state:{
             name : "Stackoverflow"
         },
         getters: {
                 name: (state) => {
                     return state.name;
                 }
         }
}

4
আপনার একটি পুরানো উত্তর পুনরুদ্ধার করার জন্য দুঃখিত, তবে কেন এই ক্ষেত্রে একজন গেটর ব্যবহার করছেন? মানচিত্রের স্টেট থেকে কেন এই নামটি ফর্মস্টোর ফেরত দেবেন না? এটি ঠিক পাশাপাশি দৃশ্যত কাজ করে।
জেক 13

@ জেক এই প্রদত্ত উদাহরণের জন্য আপনি যা বলছেন তা সঠিক। কিন্তু আপনি যখন স্টোরে সংরক্ষিত ডেটা ব্যবহার করতে চান তবে আপনি এটি অভ্যন্তরের অভ্যন্তরে করতে পারেন তবে আপনি যদি this.nameFromStoreসরাসরি ব্যবহার করেন তবে আপনি ডেটা ম্যানিপুলেট করতে পারবেন না।
ওহহহাটহাট ভারুন 15

4
স্পষ্টতার জন্য ধন্যবাদ :)
জ্যাক

@ জেক কোন সমস্যা নেই!
ওহহহাটহাট ভারুন

5

আমার জন্য এটি পরিবর্তন ছিল।

this.name = response.data;

কি গণনা ফিরে আসে তাই;

this.$store.state.name = response.data;

0

আমি ঠিক একই ত্রুটির মুখোমুখি হয়েছি

গণিত সম্পত্তি "কলরিংট্যাটাস" বরাদ্দ করা হয়েছিল তবে এর কোনও সেটর নেই

আমার পরিস্থিতি অনুসারে এখানে একটি নমুনা কোড রয়েছে

computed: {

callRingtatus(){
            return this.$store.getters['chat/callState']===2
      }

}

আমি উপরের কোডটি নিম্নলিখিত উপায়ে পরিবর্তন করি

computed: {

callRingtatus(){
       return this.$store.state.chat.callState===2
    }
}

গণিত হুকের অভ্যন্তরে প্রাপ্তদের পরিবর্তে ভ্যুেক্স স্টোর স্টেট থেকে মান আনুন

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