在VueJS上将道具从v-for的元素屈服传递给动态插槽组件

时间:2018-10-18 13:25:48

标签: javascript vue.js vuejs2 vue-component slot

我正在尝试制作VueJS的slot元素的可重用模板,但是效果不佳。

我面临的问题是这样的。我制作了3个Vue文件来构造一些模板。

  1. Guide.vue,它将是for循环的单位。
  2. ListView.vue导入ListTemplate.vue和Guide.vue
  3. ListTemplate具有一个v-for循环,用于来自ListView.vue和 Guide.vue的插槽。

我想通过槽将从v-for循环产生的行道具传递到Guide.vue,但似乎是undefined。因此,我尝试在ListView.vue上的模板包装组件元素上声明slot-scope,但是它不起作用。

// Guide.vue
<template>
    <tr onclick="location.href='info_view.html'">
        <td>
            <p class="alarm_h1">{{ slotProps.row.title }}</p>
            <p class="alarm_h2">{{ slotProps.row.title }}</p>
            <p class="alarm_h2">{{ slotProps.row.title }}</p>
        </td>
    </tr>
</template>

<script>
  export default {
    name: "guide",
    props: ['slotProps', 'row']
  }
</script>


// List.vue
<template>
    <div>
        <Guide-head/>
        <List-template :rows="guides">
            <template>
                <component :is="tr_component"></component>
            </template>
        </List-template>
    </div>
</template>

<script>
  import Guide from '../../../components/template/list/tr/Guide'
  import GuideHead from '../../../components/template/head/GuideHead'
  import ListTemplate from '../../../components/template/list/ListTemplate'
  export default {
    name: "list",
    components: {
      Guide,
      GuideHead,
      ListTemplate
    },
    data() {
      return {
        guides: [
          {id: 1, date: '2018.08.20 15:00', title: 'title 1', emergency: false},
          {id: 2, date: '2018.08.20 15:00', title: 'title 2', emergency: false},
          {id: 3, date: '2018.08.20 15:00', title: 'title 3', emergency: false}
        ],
        tr_component: 'guide'
      }
    }
  }
</script>

// ListTemplate.vue
<template>
    <div>
        <table class="reser_check_table" cellpadding="0" cellspacing="0">
            <div v-for="(row, idx) in rows" @click.native="clickNotice(idx)" :key="row.id">
                <slot v-bind:row="row">{{row.title}}</slot>
            </div>
        </table>
    </div>
</template>

<script>
  export default {
    name: "list",
    props: ['rows'],
    /*components: {
      rowTemplate: Row
    },*/
    methods: {
      clickNotice(idx) {
        console.log('clicked');
        //this.$emit('viewNotice', idx);  @viewNotice="view"
      },
      view() {

      }
    }
  }
</script>

0 个答案:

没有答案