Передать динамические реквизиты дочернему компоненту в Vue.js

#javascript #vue.js #vue-props

Вопрос:

В моем веб-приложении есть два компонента: основной и модальный обновления. Я хочу, чтобы модальный компонент можно было отобразить сразу при входе на главную страницу. Итак, когда main.vue смонтирован, showModal устанавливается значение true. Однако модальный не отображается, когда Веб переходит на главную страницу. Я думаю showModal , что становится истинным и переходит к модальному компоненту. Когда я использую vue devtool, он показывает popModal значение false. Это действительно смущает меня.

Должен ли я изменить жизненный цикл, который устанавливает истинное значение или какое-либо предложение?

Спасибо!

Main.vue

 <template>
  <modal :isShow="showModal"></modal>
  ...
</template>

<script>
export default {
 data () {
   return {
    showModal: false
  }
 }

 mounted() {
  //do something
  this.showModal = true
 }
}
<script>
 

Модальный.vue

 <template>
  <modal v-if="popModal" v-model="popModal">
   <p>xxxxxx</p>
   <button @click="fn()">Click</button>
  </modal>
</template>

<script>
export default {
 props: ['isShow'],
 data () {
  return {
   popModal: this.isShow//supposed to be true
  }
 }
 methods: {
  fn() {
    this.popModal = false
  }
 }
}
<script>
 

Ответ №1:

Проблема в том, что данные инициализируются один раз при создании компонента. Когда реквизит меняется, в данных остается старое значение. Вам нужно добавить наблюдателя для обновления данных

 watch: {
  isShow(newVal, oldVal) {
    // newVal contains the updated value
    // oldVal contains the previous value
    this.popModal = newVal;
  }
}
 

Или вы можете инициализировать данные после изменения значения:

 // Main.vue
<modal v-if="showModal" :isShow="showModal"></modal>

// Modal.vue
<modal v-model="popModal">
 

Комментарии:

1. Какое значение в первом предложенном методе?

2. аргумент «значение» — это новое значение «isShow» vuejs.org/v2/guide/computed.html#Watchers