有没有办法将过滤器应用于Vue组件中的插槽内容?
为了澄清,我想截断HTML中手动包含的文本。例如,我想改变这个:
<!-- In the view -->
<my-component>
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Cumque,
laboriosam quasi rerum obcaecati dignissimos autem laudantium error
quas voluptatibus debitis?
</my-component>
进入这个:
<!-- Generated component -->
<div>
Lorem ipsum dolor sit amet, consectetur adipisicing ...
</div
我似乎无法在文档中找到此信息。
谢谢。
答案 0 :(得分:17)
同样的方式可以是:
你的main.js文件中的:
var filter = function(text, length, clamp){
clamp = clamp || '...';
var node = document.createElement('div');
node.innerHTML = text;
var content = node.textContent;
return content.length > length ? content.slice(0, length) + clamp : content;
};
Vue.filter('truncate', filter);
在你的模板中:
{{data.content | truncate(300, '...')}}
答案 1 :(得分:13)
您可以使用过滤器截断它。
//credit to @Bill Criswell for this filter
Vue.filter('truncate', function (text, stop, clamp) {
return text.slice(0, stop) + (stop < text.length ? clamp || '...' : '')
})
然后给过滤器你想要字符串的长度
<my-component>
{{'Lorem ipsum dolor sit amet, consectetur adipisicing' | truncate 50 }}
</my-component>
在子组件中,插槽中的内容按原样传递,并且不能作为可以从子端截断的变量。
答案 2 :(得分:4)
您也可以这样:
export default {
data: () => {
return {
}
},
created(){
},
filters: {
truncate: function (text, length, suffix) {
return text.substring(0, length) + suffix;
},
}
}
或
Vue.filter('truncate', function (text, length, suffix) {
return text.substring(0, length) + suffix;
});
然后像这样使用它:
<div id="app">
<span>{{ text | truncate(10, '...') }}</span>
</div>
如果您想了解更多的vue过滤器,建议您阅读以下内容:How to Create Filters in Vue.js with Examples
答案 3 :(得分:1)
对@community答案的小修正:
内部组件:
export default {
data: () => {
return {}
},
created() {
},
filters: {
truncate: function (text, length, suffix) {
if (text.length > length) {
return text.substring(0, length) + suffix;
} else {
return text;
}
},
}
}
或全局:
/** Vue Filters Start */
Vue.filter('truncate', function (text, length, suffix) {
if (text.length > length) {
return text.substring(0, length) + suffix;
} else {
return text;
}
});
/** Vue Filters End */
它仍然可以以相同的方式使用:
<div id="app">
<span>{{ text | truncate(10, '...') }}</span>
</div>
答案 4 :(得分:1)
对于nuxt应用程序,这对我有用:
<div v-html="$options.filters.truncate(post.body)"></div>
这是我的过滤器
filters: {
truncate: function (text, length) {
if (text.length > 30) {
return text.substring(0, 30) + '...'
} else {
return text
}
},
},
答案 5 :(得分:0)
您可以只使用slice js方法来指示字符串的Hello
和begin
位置。 More info
end