Vue.js readmore/もっと見る/続きを読むの実装方法

vue.jsを使い、readmoreに関わっている実装方法をまとめてみました。


#1、readmore表示のみ#

参考先：[Quick Vue: How to implement ‘read more’ feature](https://medium.com/@sdkcodes/quick-vue-how-to-implement-read-more-feature-a116b1ba48a8)

##効果図：##
表示したい文字数を設定すると、残りの部分はRead more...で表示されます。↓
![スクリーンショット 2019-12-02 13.09.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181748/435963c9-fc40-e398-41cf-99359be8bed4.png)
Read more...を押すと、全文が表示されます。ただし、省略の状態に戻れないです。↓
![スクリーンショット 2019-12-02 13.09.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181748/2e864620-9d13-4d85-1585-b96c34c27765.png)


##コード##
```readmore1.vue

<template>    
<div>   
<span v-if="!readMoreActivated">{{longText.slice(0, 20)}}   </span>    
<a class="" v-if="!readMoreActivated" @click="activateReadMore" href="#"> Read more...</a>        
<span v-if="readMoreActivated" v-html="longText"></span>    
</div>
</template>

<script>
export default {    
  name: "Readmore",    
  data(){        
　 return {
　　longText: `これはテスト。これはテスト。これはテスト。これはテスト。これはテスト。これはテスト。これはテスト。これはテスト。これはテスト。これはテスト。これはテスト。これはテスト。これはテスト。これはテスト。これはテスト。これはテスト。`,
    readMoreActivated: false    
　}
}
  ,methods: {    
   activateReadMore(){        
    this.readMoreActivated = true;    
   },
 }
}
</script>
```


#2、表示したい文字数を設定すると、残りの部分は「...」で表示する#

参考先：[表示したくない部分は省略](https://segmentfault.com/a/1190000019602889?utm_source=tag-newest)

##効果図：##
表示したい文字数を設定すると、残りの部分は「...」で表示します。ただし、...を押すことができず、ただの...です。
制限文字数は10の時(value.slice(0,10))、↓
![スクリーンショット 2019-12-02 13.16.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181748/91716872-e44d-c72b-e1be-2b239f07e2db.png)
制限文字数は100の時(value.slice(0,100))、↓
![スクリーンショット 2019-12-02 13.16.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181748/07e9eb97-eb63-4ead-ab8c-8cc158dff3b4.png)

##コード##
```readmore2.vue
<template>
    <div class="title">{{ name | ellipsis}}</div>
</template>

<script>
    export default {
        name: "demo",
        data(){
            return {
                name:'これはテストです。これはテストです。これはテストです。これはテストです。これはテストです。これはテストです。これはテストです。これはテストです。これはテストです。これはテストです。これはテストです。これはテストです。これはテストです。これはテストです。これはテストです。これはテストです。これはテストです。これはテストです。これはテストです。これはテストです。',
            }
        },
        filters:{
            ellipsis(value){
                if (!value) return '';
                if (value.length > 10) {
                    return value.slice(0,10) + '...'
                }
                return value
            }
        }
    }
</script>

<style scoped>

</style>

```


#3、readmore表示+readless表示#

参考先：[github-read-more](https://github.com/orlyyani/read-more)


##効果図：##
表示したい文字数を設定すると、残りの部分はread moreで表示されます。↓
![スクリーンショット 2019-12-02 13.22.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181748/c2ff6d5e-7eb9-2075-1188-f461ae0a967d.png)
read moreを押すと、全文が表示されます。↓また、read lessを押すと、省略文に戻ります。↑
![スクリーンショット 2019-12-02 13.22.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181748/d4a732f7-451f-3735-28cb-fd96ee288e6f.png)


[demo page](https://orlyyani.github.io/read-more/#/)

##コード##
```
 $npm install vue-read-more --save
```
```main.js
 import ReadMore from 'vue-read-more';
 
 Vue.use(ReadMore)
```
```readmore3.vue
<template>
  <div class="hello">
    <read-more more-str="read more" :text="msg" link="#" less-str="read less" :max-chars="100"></read-more>
   
</template>

<script>
export default {
  data () {
    return {
      msg: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ',
    }
  }
}
</script>
```