2017-10-07 1 views
0

私のvue.jsアプリでは、モーダル内にカスタムデータを表示する必要があります。私はどこでも私のアプリの中からモーダルを表示することができるようにvue-js-modalを使用しています:私はそれを試してみることは非常に単純なカスタムモーダルテンプレートを作成しているhttps://www.npmjs.com/package/vue-js-modalvue-js-modalを使用すると、モーダルに渡されるデータにどのようにアクセスできますか?

ItemModal.vue呼ば:

<template> 
    <modal name="item-modal"> 
     <b>{{item.name}}</b> 
    </modal> 
</template> 
<script> 
    export default { 
     name: 'item-modal', 
     props: [ 'item' ] 
    } 
</script> 

をそして私はできる午前しかし、モーダルが空に来る

<template> 
    <div id="content"> 
     <item-modal></item-modal> 
     <li v-for="item in items"> 
      <a v-on:click="showModal(item)"> 
       <span>{{item.name}}</span> 
      </a> 
     </li> 
    </div> 
</template> 
<script> 
    import ItemModal from './ItemModal.vue'; 
    import Items from '@/api/items'; 

    export default { 
     name: 'items', 
     asyncComputed: { 
      items: { 
       async get() { 
        const items = await Items.getAll(); 
        return items.data; 
       }, 
       default: [] 
      } 
     }, 
     methods: { 
      showModal(item) { 
       this.$modal.show('item-modal', { item: item }); 
      } 
     }, 
     components: { 
      ItemModal 
     } 
    } 
</script> 

:首尾よく私のItemList.vueコンポーネント内からそれを呼び出します。

私がに記載されていないものは、showModal機能内でそれに渡すデータを使用できるようにするにはどうすればよいですか?

+0

を表示しますが、最大の読み提案スロット。 https://vuejs.org/v2/guide/components.html#Content-Distribution-with-Slots – Bert

答えて

0

あなたはこの方法で、あなたのプロジェクトのmain.jsファイルにプラグインを登録する必要があります

import VModal from 'vue-js-modal' 
Vue.use(VModal) 

を次にあなたのプロジェクトの任意の場所でshow関数を呼び出すことができるようになります。

あなたはモーダルへのparams渡す必要がある場合
this.$modal.show('the-name-you-asigned-in-your-modal'); 

あなたは簡単beforeOpenイベントハンドラでそれらを受け取ることができます。

//In the template  
<modal name="hello-world" @before-open="beforeOpen"/> 


methods: { 
    beforeOpen (event) { 
    console.log(event.params.foo); 
    } 
} 

私はあなたがそれを動作させるのにはかなり近いと知っていますので、参考にしていただけるように実際の例を提供します:

1- main.jsファイルにプラグインを組み込みます。

// The Vue build version to load with the `import` command 
// (runtime-only or standalone) has been set in webpack.base.conf with an alias. 
import Vue from 'vue' 
import App from './App' 

import VModal from 'vue-js-modal' 

Vue.config.productionTip = false 
Vue.use(VModal) 

/* eslint-disable no-new */ 
new Vue({ 
    el: '#app', 
    template: '<App/>', 
    components: { App } 
}) 

2 - モーダルを含むコンポーネント(のはModal.vueそれを呼びましょう)

<template> 
    <modal name="hello-world" @before-open="beforeOpen"> 
    <div class="wrapper"> 
     <p>{{ itemToShow }}</p> 
    </div> 
    </modal> 
</template> 

<script> 
    export default { 
    name: 'HelloWorld', 

    data: function() { 
     return { 
      item: '' 
     } 
    }, 

    computed: { 
     itemToShow: function() { 
     return this.item 
     } 
    }, 

    methods: { 
     beforeOpen (event) { 
     this.item = event.params.item; 
     } 
    } 
    } 
</script> 

<style scoped> 
    .wrapper { 
    height: 100%; 
    width: 100%; 
    background-color: black; 
    } 
</style> 

3-作成モーダルコンポーネント

<template> 
    <div id="app"> 
    <img src="./assets/logo.png"> 
    <Modal /> 
    <button @click="onClick"> 
     CLICK HERE! 
    </button> 
    </div> 
</template> 

<script> 
    import Modal from './components/Modal' 

    export default { 
    name: 'app', 
    components: { 
     Modal: Modal 
    }, 
    methods: { 
     onClick() { 
     this.$modal.show('hello-world', {item: 'Hello world'}); 
     } 
    } 
    } 
</script> 

<style> 
    #app { 
    font-family: 'Avenir', Helvetica, Arial, sans-serif; 
    -webkit-font-smoothing: antialiased; 
    -moz-osx-font-smoothing: grayscale; 
    text-align: center; 
    color: #2c3e50; 
    margin-top: 60px; 
    } 
</style> 
関連する問題