vue学习

Vue自定义组件 - MoreText更多文本

2019-01-29  本文已影响0人  知轩的随写

本文代码在线修改与运行:
vue实现简单的MoreText组件

当某一段话太长,而显示区域又比较小的时候,我们需要在页面中省略文本,同时增加一个互动的 [更多] 按钮用于展开省略的文字,再点击 [收起] 则恢复省略模式。

基于Vue.js的自定义组件,我们可以很轻松快速地制作一个MoreText组件。

1. 定义组件

<!-- 组件模板 -->
<script type="text/x-teamplate" id="moreTextTpl">
  <div class="moreText">
    {{showText}}
    <span class="moreToggle" v-if="needMore" @click="toggle">{{toggleText}}</span>
  </div>
</script>


上面这段代码展示了MoreText这个组件的基本html结构。我们再来看JavaScript部分怎么写

Vue.component('more-text', {
  template: '#moreTextTpl',   //引用上面写的模板
  props: ['moreLength'],        //增加一个属性,用于指定多少个字符才展示【更多】功能
  mounted: function() {
    this.text = this.$slots.default[0].text;   //从默认插槽获取内容
  },
  data: function() {
    return {
      text: '',
      toggleStatus: false
    };
  },
  computed: {
    //当内容超过指定的长度,才需要【更多】功能
    needMore: function() {
      return this.text.length > this.moreLength;
    },
    //展示的文本, 当前展开状态或者不需要【更多】功能时,展示原本内容,否则截取内容
    showText: function() {
      if (this.toggleStatus || !this.needMore) {
        return this.text;
      } else {
        return this.text.substring(0, this.moreLength) + '...'
      }
    },
    //互动按钮
    toggleText: function() {
      return this.toggleStatus ? '收起' : '更多';
    }
  },
  methods: {
    //切换状态
    toggle: function() {
      this.toggleStatus = !this.toggleStatus;
    }
  }
});

是不是很简单,就是简单的控制展开与收起的状态,其他属性使用computed做响应式处理。

2.使用
看看如何使用:

<style>
.moreToggle{
  color:green;
  margin-left:10px;
  cursor:pointer
}
</style>


<!-- 演示 -->
<div id="app">
  <more-text more-length="40">
  {{text}}
  </more-text>
</div>


<script>
new Vue({
  el: '#app',
  data:{
    text:'感谢 Vue 的响应式系统,它始终知道何时进行更新 (如果你用对了的话)。不过还是有一些边界情况,你想要强制更新,尽管表面上看响应式的数据没有发生改变。也有一些情况是你想阻止不必要的更新。'
  }
});
</script>

这样,一个简单粗糙的MoreText组件就完成了。
Vue让前端开发变得简单高效!!!

本文代码在线修改与运行:
vue实现简单的MoreText组件

上一篇下一篇

猜你喜欢

热点阅读