我想隐藏的文本,如果超过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,并且该列的文本在所有行中都会展开。它应该应用于特定行和特定单元格。
添加了数据源对象。我添加了静态数据源,但它是动态的,并且随着列数的不同而不同。
发布于 2018-10-10 04:14:10
使用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
处理程序,也可能使用对摘要做出反应的计算属性,而不是过滤器。
发布于 2018-10-10 04:17:31
您可以使用computed
属性来处理这种情况,当您单击链接时,将显示整个链接文本:
编辑
我建议下面的解决方案,通过修改你的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>
https://stackoverflow.com/questions/52728426
复制相似问题