こちらの記事はパート2です。
前回の記事はこちらから↓↓
https://qiita.com/tanaka2020/items/8ec8ae0fdd3ad4409c74
実装
4.ルートの設定
routesディレクトリ内のweb.phpを編集
Route::get('/posts/{post?}/firstcheck', 'LikeController@firstcheck')->name('like.firstcheck');・・・1
Route::get('/posts/{post?}/check', 'LikeController@check')->name('like.check');・・・2
1.Vue読み込み時にLikeControllerのfirstCheck()アクション呼び出し
2.いいねボタンクリック時に記事id別にLikeControllerのCheck()アクション呼び出し
5.Vue Components作成
resouces
|ーjs
|ーcomponents
|ーLikeComponent.vue
<template>
<div>
<button v-if="status == false" type="button" @click.prevent="like_check" class="btn btn-outline-warning">♡</button><a v-if="status == false" href="#">{{count}}</a>
<button v-else type="button" @click.prevent="like_check" class="btn btn-warning">♥</button><a v-if="status == true" href="#">{{count}}</a>
</div>
</template>
<script>
export default {
props: ['post_id'],・・・1
data() {
return {
status: false,・・・2
count: 0,
}
},
created() {
this.first_check()・・・3
},
methods: {
first_check() {
const id = this.post_id
const array = ["/posts/",id,"/firstcheck"];
const path = array.join('')
axios.get(path).then(res => {
if(res.data[0] == 1) {
console.log(res)
this.status = true
this.count = res.data[1]
} else {
console.log(res)
this.status = false
this.count = res.data[1]
}
}).catch(function(err) {
console.log(err)
})
},
like_check() {
const id = this.post_id
const array = ["/posts/",id,"/check"];
const path = array.join('')
axios.get(path).then(res => {
if(res.data[0] == 1) {
this.status = true
this.count = res.data[1]
} else {
this.status = false
this.count = res.data[1]
}
}).catch(function(err) {
console.log(err)
})
},
}
}
</script>
1.blade側はより投稿記事のidが渡されます。
<like-component :post_id="{{$post->id}}"></like-component>
2.statusがfalseだといいねされていない状態です。
3.Vue読み込み時にLikeControllerのfirstCheck()アクションが実行されます。
まとめ
今回はAxiousで実装しており非同期でLikeContorollerのアクションを呼び出して、いいね機能を実装しています。もっと簡単で出来る方法や綺麗な記述ありましたらご教授お願いします。