2017-06-12 29 views
1

私はコンポーネントTopBar.vueを持っており、モーダル(子コンポーネントFeedback.vue)を開こうとしています。Vue.jsコンポーネントデータ値を子コンポーネントに渡す

showFeedbackModalプロパティを両方のコンポーネントにバインドするにはどうすればよいですか?

私はあなたが@click="showFeedbackModal = true<a>タグをクリックすると、値true<feedback>コンポーネントに渡されると、モーダルが示されているように、それを作りたいです。

TopBar.vue(メイン)

<template> 
    <div> 
     <section class="top-bar level"> 
      <div class="level-left"> 
       ... 

       <ul class="level-item"> 
        <li><a @click="showFeedbackModal = true"><i class="fa fa-envelope-open-o" aria-hidden="true"></i> Beta Feedback</a></li> 
       </ul> 
      </div> 
      ...   
     </section> 

     <feedback :showFeedbackModal="showFeedbackModal"></feedback>    
    </div> 
</template> 

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

Feedback.vue(モーダル)

<template> 
    <div> 
     <div v-if="showModal" class="modal is-active"> 
      <div class="modal-background" @click="showModal = false"></div> 
      <div class="modal-content"> 
       <div class="box"> 
        This is the feedback content 
       </div> 
      </div> 
      <button class="modal-close" @click="showModal = false"></button> 
     </div> 
    </div> 
</template> 

<script> 
    export default {   
     props: ['showFeedbackModal'], 

     data() { 
      return { 
       showModal: false 
      } 
     }, 

     beforeMount() { 
      this.showModal = this.showFeedbackModal; 
     } 
    } 
</script> 

答えて

1

あなたはFeedbackコンポーネントのmountedフックであなたのshowModalプロパティを設定しています。つまり、コンポーネントがDOMにマウントされると、showModalの値は最初はshowFeedbackModalの値に設定されますが、showFeedbackModalの値が変わると変更されません。

あなたは自分のFeedbackコンポーネントでshowModal小道具行う必要があります。

export default {   
    props: ['showModal'], 
} 

そして、あなたのTopBarコンポーネントで、あなただけのshowModalプロパティの値としてshowFeedbackModal変数を渡す必要があります:

<feedback :showModal="showFeedbackModal"></feedback> 

Feedbackモーダルコンポーネントに

<button class="modal-close" @click="$emit('close')"></button> 

そして、そのイベントのハンドラでshowFeedbackModalの値を更新します:あなたはFeedbackコンポーネントでカスタムイベントを発することができ、その親コン​​ポーネントのshowFeedbackModal変数に影響を与えることができるよう

<feedback 
    :showModal="showFeedbackModal" 
    @close="showFeedbackModal = false" 
></feedback> 
+0

AGH。とても近い。意味あり。私はそれを試してみましょう。 –

+0

モーダルが表示されます。しかし、閉じるボタンやモーダルバックグラウンドをクリックして閉じようとするとエラーが出ます: '親コンポーネントが再レンダリングされるたびに値が上書きされるので、プロップを直接変更しないでください。代わりに、小道具の値に基づいてデータまたは計算されたプロパティを使用します。プロットが変更されている: "showModal" ' –

+0

イベントを送出し、親コンポーネントにデータ操作を処理させる必要があります。私の編集を参照してください。 – thanksd

関連する問題