v-forが実行される前にslickが実行されているせいか、カルーセルの要素としてにんしきされておりません。
v-forが完了後にslickが実行される方法はありますでしょうか?
html
1<template> 2 <div id="page"> 3 <div id="contents"> 4 <slick ref="slick" :options="slickOptions"> 5 <div class="card-carousel--card" v-for="item in items"> 6 <!-- 現在はパスをEVENT_DETAIL_PATH+item.urlにしているが、詳細をつかわずJSONでURLをもらえばイベンターはイベント一覧にいくことができるのでは? --> 7 <router-link v-if="listname!='eventers'" v-bind:to="EVENT_DETAIL_PATH+item.url"> 8 <img :src="item.img"> 9 <div class="card-carousel--card--footer" style="width:200px"> 10 <p>{{ item.title }}</p> 11 </div> 12 </router-link> 13 <router-link v-if="listname=='eventers'" @click="getEventListByOrgnizerId(item.url)" v-bind:to="EVENT_PATH+'?orgnizerId='+item.url"> 14 <img :src="item.img"> 15 <div class="card-carousel--card--footer" style="width:200px"> 16 <p>{{ item.title }}</p> 17 </div> 18 </router-link> 19 </div> 20 </slick> 21 </div><!-- / #contents --> 22 <input type="hidden" id="refresh" value="no"> 23 </div><!-- #page --> 24 25</template>
vue
1<script> 2import Slick from 'vue-slick'; 3 4export default { 5 props:['listname'], 6 components: { Slick }, 7 data() { 8 return { 9 slickOptions: { 10 slidesToShow: 4, 11 }, 12 currentOffset: 0, 13 windowSize: 3, 14 paginationFactor: 220, 15 items: [ 16 17 ], 18 }; 19}, 20 21computed: { 22 atEndOfList() { 23 return ( 24 this.currentOffset <= 25 this.paginationFactor * -1 * (this.items.length - this.windowSize) 26 ); 27 }, 28 atHeadOfList() { 29 return this.currentOffset === 0; 30 } 31}, 32created:function(){ 33}, 34mounted:function(){ 35 console.log(this.listname); 36 this.getList(this.listname); 37}, 38methods: { 39 getEventListByOrgnizerId(oId) { 40 fetch("static/data/EventList.json"+"?orgnizerId="+oId).then(function(response) { 41 return response.json(); 42 }).then(myJson => { 43 console.log(myJson); 44 // localStorage.events = Object.assign([], JSON.stringify(myJson.events)); 45 // console.log(JSON.stringify(myJson.events)); 46 localStorage.setItem('events',JSON.stringify(myJson.events)) 47 localStorage.setItem('pages',JSON.stringify(myJson.pages)) 48 this.events = myJson.events; 49 this.pages = Number(myJson.pages); 50 // console.log(this.events); 51 }); 52 }, 53 moveCarousel(direction) { 54 // Find a more elegant way to express the :style. consider using props to make it truly generic 55 if (direction === 1 && !this.atEndOfList) { 56 this.currentOffset -= this.paginationFactor; 57 } else if (direction === -1 && !this.atHeadOfList) { 58 this.currentOffset += this.paginationFactor; 59 } 60 }, 61 62 getList(listname) { 63 if(listname=='new'){ 64 //あなたへのおすすめ 65 fetch("static/data/TopEventList.1.json").then(function(response) { 66 return response.json(); 67 }).then(myJson => { 68 this.items = myJson.events; 69 }); 70 }else if(listname=='usersNew'){ 71 //エリアの新着 72 fetch("static/data/TopEventList.2.json").then(function(response) { 73 return response.json(); 74 }).then(myJson => { 75 this.items = myJson.events; 76 }); 77 }else if(listname=='eventers'){ 78 //過去参加した主催者のイベント 79 fetch("static/data/TopEventList.3.json").then(function(response) { 80 return response.json(); 81 }).then(myJson => { 82 this.items = myJson.events; 83 }); 84 }else{ 85 fetch("static/data/TopEventList.json").then(function(response) { 86 return response.json(); 87 }) 88 .then(myJson => { 89 this.items = myJson.events; 90 }); 91 } 92 }, 93 next() { 94 this.$refs.slick.next(); 95 }, 96 prev() { 97 this.$refs.slick.prev(); 98 }, 99 reInit() { 100 // Helpful if you have to deal with v-for to update dynamic lists 101 this.$nextTick(() => { 102 this.$refs.slick.reSlick(); 103 }); 104 }, 105} 106 107}; 108</script>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/07 08:48 編集
2019/02/08 01:22
2019/02/08 03:22