programing

VueJ 컴포넌트에서 데이터를 가져오는 방법s

newsource 2022. 8. 25. 00:01

VueJ 컴포넌트에서 데이터를 가져오는 방법s

다음과 같은 컴포넌트가 있습니다.

요소

<template>
<div>
  <label class="typo__label">Single selecter</label>
  <multiselect v-model="value" :options="options" :searchable="false" :close-on-select="false" :show-labels="false" placeholder="Pick a value"></multiselect>
</div>
</template>

<script>
import Multiselect from 'vue-multiselect'

export default {
  components: {
    Multiselect
  },
  data () {
    return {
      value: '',
      options: ['Select option', 'options', 'selected', 'mulitple', 'label', 'searchable', 'clearOnSelect', 'hideSelected', 'maxHeight', 'allowEmpty', 'showLabels', 'onChange', 'touched']
    }
  }
}
</script>

내 페이지에서 다음과 같이 사용하고 있습니다.

<p id="app-two">
  <dropdown></dropdown>
  @{{ value }}
  @{{ message }}
</p>

<script>
    new Vue({
    el: '#app',
    data: {
        message: 'Test message'
    }
});
</script>

페이지를 실행하면 @{{ message }}에 "test message"가 표시되지만 @{{ value }}은(는) 공백입니다.VueJS Dev Tools에서 업데이트되는 드롭다운 구성 요소의 값은 볼 수 있지만 페이지에 표시되지 않습니다.vue 요소의 컴포넌트 데이터에 액세스하려면 어떻게 해야 합니까?예를 들어 @{ dropdown.value }} 입니다.

<template>
    <div>
      <label class="typo__label">Single selecter</label>
      <multiselect v-model="internalValue" :options="options" :searchable="false" :close-on-select="false" :show-labels="false" placeholder="Pick a value">  </multiselect>
    </div>
</template>

<script>
    import Multiselect from 'vue-multiselect'

    export default {
      components: {
        Multiselect
      },
      props: ['value'],
      data () {
        return {
          internalValue: this.value,
          options: ['Select option', 'options', 'selected', 'mulitple', 'label', 'searchable', 'clearOnSelect', 'hideSelected', 'maxHeight', 'allowEmpty', 'showLabels', 'onChange', 'touched']
        }
      },
      watch:{
         internalValue(v){
             this.$emit('input', v);
         }
      }
    }
</script>

그리고 당신의 페이지에서

<p id="app-two">
  <dropdown v-model="selectedValue"></dropdown>
  @{{ selectedValue}}
  @{{ message }}
</p>

<script>
    new Vue({
    el: '#app',
    data: {
        selectedValue: null
        message: 'Test message'
    }
});
</script>

예를 들어 멀티 셀렉트가 아닌 커스텀컴포넌트를 사용하여v-model.

이것이 나에게 가장 좋고 깨끗한 방법이다.

상위 컴포넌트

<template>
    <ChildComponent v-model="selected" />
</template>

하위 구성 요소

<template>
    <Multiselect
        :value="value"
        :options="options"
        :show-labels="false"
        :multiple="true"
        :close-on-select="false"
        :clear-on-select="false"
        :searchable="false"
        :limit="1"
        :limit-text="(count) => $t('app.multiselect.and_n_more', { n: count })"
        :placeholder="$t('app.select')"
        label="name"
        track-by="name"
        @input="$emit('input', $event)"
    />
</template>

<script>    
export default {
    props: {
        value: {
            type: Array,
            default: () => []
        }
    },
    data() {
        return {
            options: [{id:1, name:'John'}, {id:2, name:'Tom'}]
        }
    }
}
</script>

언급URL : https://stackoverflow.com/questions/42684754/how-to-get-data-from-a-component-in-vuejs