Усекать и показывать или скрывать текст ссылки при нажатии на ссылку «читать дальше» - PullRequest
0 голосов
/ 09 октября 2018

Я хочу скрыть текст, если ограничение превышает 300 символов, и показать link, а если перейти по ссылке, показать весь контент.

html:

 <tr v-for="(row,index) in datasource">
                            <td v-for="column in gridSchema.grid.columns" class="wrap-break-word" v-show="column.isVisible">  

<span v-if="row[column.headername].length >= 300  && toggle == false" v-html="$options.filters.limitTo(row[column.headername])">
                                    </span><a v-on:click="toggleFlag()" v-show="!row['isEditable'] && row[column.headername].length >= 300  && toggle == false" >Read more</a>
                                    <span v-if="(row[column.headername].length < 300  || toggle == true)" v-html="row[column.headername]">
                                    </span>

<td>
</tr>

js:

  data: {
                ..
                    toggle: false,
datasource:
[
      {
        "id": 0,
        "name": "Christa Hansen",
        "informations": "Unpleasant astonished an diminution up partiality. Noisy an their of meant. Death means up civil do an offer wound of. Called square an in afraid direct. Resolution diminution conviction so mr at unpleasing simplicity no. No it as breakfast up conveying earnestly immediate principle. Him son disposed produced humoured overcame she bachelor improved. Studied however out wishing but inhabit fortune windows. "
        "biliography":"Remember outweigh do he desirous no cheerful. Do of doors water ye guest. We if prosperous comparison middletons at. Park we in lose like at no."
     },
      {
        "id": 1,
        "name": "Mckenzie Fuller",
        "informations":"Did shy say mention enabled through elderly improve."
        "biliography":" It ye greatest removing concerns an overcame appetite. Manner result square father boy behind its his. Their above spoke match ye mr right oh as first. Be my depending to believing perfectly concealed household. Point could to built no hours smile sense. "
      },
      {
        "id": 2,
        "name": "Oneal Clark",
        "informations": "-",
        "biliography":"-"

      }
    ]
               ..
            }
    methods:{

    toggleFlag: function () {
                    console.log('within toggleflag final');
                    this.toggle = !this.toggle;
                }

    },
     filters: {
                limitTo: function (value) {
                    if (!value) return '';
                    return value.substring(0, 300 )+ '...';
                }

редактировать: приведенный выше код работает, но при нажатии «Читать далее» он применяется ко всем столбцам таблицы, где бы ни отображалась ссылка.

пример: таблицаСтроки col1, col5 превышают 300 символов и показывают ссылку «читать дальше».если щелкнуть ссылку col1 «читать дальше», она также применяется к col5, и текст столбца раскрывается для всех строк.Он должен применяться к определенной строке и конкретной ячейке.

добавлен объект источника данных.Я добавил статический источник данных, но он динамический и различается по количеству столбцов.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Вы можете использовать свойство computed для обработки этого случая, и при нажатии на ссылку будет показан весь текст ссылки:

РЕДАКТИРОВАТЬ

iпредложите следующее решение, построенное путем изменения вашего datasource и изменения каждой ячейки в хуке mounted, "id":0 будет "id":{txt:0,toggled:true}, "informations":"..." будет "informations":{txt:"...",toggled:false} и так далее.и когда вы щелкаете по ячейке, вы изменяете ее свойство toggled на false

// ignore the following two lines, they just disable warnings in "Run code snippet"
Vue.config.devtools = false;
Vue.config.productionTip = false;

new Vue({
  el: '#app',

  data() {
    return {
      toggle: false,
      link: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum augue eros, varius in massa vitae, ultrices fringilla eros',
      showAll: false,
      columns: ["id", "name", "informations", "biliography"],
      datasource: [{
          "id": 0,
          "name": "Christa Hansen",
          "informations": "Unpleasant astonished an diminution up partiality. Noisy an their of meant. Death means up civil do an offer wound of. Called square an in afraid direct. Resolution diminution conviction so mr at unpleasing simplicity no. No it as breakfast up conveying earnestly immediate principle. Him son disposed produced humoured overcame she bachelor improved. Studied however out wishing but inhabit fortune windows. ",
          "biliography": "Remember outweigh do he desirous no cheerful. Do of doors water ye guest. We if prosperous comparison middletons at. Park we in lose like at no."
        },
        {
          "id": 1,
          "name": "Mckenzie Fuller",
          "informations": "Did shy say mention enabled through elderly improve.",
          "biliography": " It ye greatest removing concerns an overcame appetite. Manner result square father boy behind its his. Their above spoke match ye mr right oh as first. Be my depending to believing perfectly concealed household. Point could to built no hours smile sense. "
        },
        {
          "id": 2,
          "name": "Oneal Clark",
          "informations": "some info",
          "biliography": "some info"

        }
      ]

    }
  },
  computed: {
    trunc_link() {
      return this.link.substring(0, 30)
    }
  },
  methods: {

    toggleFlag: function(index, column) {
      this.datasource[index][column].toggled = true;
    },
    limitTo: function(value) {
      if (!value) return '';
      return value.substring(0, 50) + '...';
    }

  },
  mounted() {
    let d = [];
    d = this.datasource.map(item => {
      let o = {
        "id": {
          txt: item.id,
          toggled: true
        },
        "name": {
          txt: item.name,
          toggled: true
        },
        "informations": {
          txt: item.informations,
          toggled: false
        },
        "biliography": {
          txt: item.biliography,
          toggled: false
        },

      }
      return o;
    });

    this.datasource = d;
    //console.log(this.datasource)
  }
});
.readmore {
  color: #005faa!important;
  cursor: pointer;
}
<link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap/dist/css/bootstrap.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>


<div id="app" class="container">

  <a href="#" v-if="!showAll" @click="showAll=true"> {{trunc_link}}...</a>
  <a href="#" v-else> {{link}}</a>
  <table class="table-striped">
    <tbody>
      <tr v-for="(row,index) in datasource">
        <td v-for="column in columns" class="wrap-break-word" v-show="true">

          <span v-if="row[column].txt.length >= 50  && row[column].toggled == false" v-html="limitTo(row[column].txt)">
                                    </span><a class="readmore" v-on:click="toggleFlag(index,column)" v-show="!row['isEditable'] && row[column].txt.length >= 50  && row[column].toggled == false">Read more</a>
          <span v-if="(row[column].txt.length < 50  || row[column].toggled == true)" v-html="row[column].txt">
                                    </span>

          <td>
      </tr>
    </tbody>
  </table>
</div>
0 голосов
/ 09 октября 2018

Использование v-if
v-if="obj.informations.length > 300"

Пример:

<div v-if="summary">
  {{ obj.informations | linitToDisplay(300) }}
  <a v-if="obj.informations.length > 300" @click="summary = false">Read more<a>
<div v-else>
  {{ obj.informations }}
</div>

Но вы, вероятно, напишите toggleSummary () вместо встроенного обработчика summary = false и может использовать вычисляемое свойство, которое реагирует на сводку вместо фильтра.

...