Vue3 之 过滤器
admin 阅读: 2024-04-01
后台-插件-广告管理-内容页头部广告(手机) |
1、过滤器简介
1.1、全局过滤器与局部过滤器
过滤器本质上是一个函数,与自定义指令类似。
全局过滤器
Vue.filter(id, [definition])局部过滤器
- new Vue({
- el: '#app',
- filters: {
- definition(value): {
- ...
- }
- }
- })
案例:将字符串首字母转换为大写字母的全局过滤器
- Vue.filter('capitalize', function (value) {
- if (!value) return '';
- value = value.toString();
- return value.charAt(0).toUpperCase() + value.slice(1);
- })
如果换成局部过滤器
- let vm = new Vue({
- el: '#app',
- data: { // 参数定义,字典形式
- },
- computed: { // 计算属性,多次调用,只计算一次
- },
- methods: { // 普通方法,多次调用,多次计算
- },
- filters: { // 过滤器
- capitalize(value) {
- if (!value) return '';
- value = value.toString();
- return value.charAt(0).toUpperCase() + value.slice(1);
- }
- }
- })
注意:
- 当全局过滤器和局部过滤器重名,会采用局部过滤器
- 与自定义命令一样,全局过滤器可以在任何 Vue 实例的模板中使用,而局部过滤器只能在该实例绑定的视图中使用
过滤器可以使用在两个地方:
双花括号:{{ 变量 | 过滤器 }}
v-bind 表达式:v-bind:href=“变量 | 过滤器”
2、过滤器的参数
过滤器函数总是接收表达式的值作为第一个参数,过滤器本质上是一个 JS 函数,自然可以接收多个参数。
不建议把过滤器功能做的很复杂,这违背了过滤器的设计初衷,比如:Vue.filter(‘format’, function (value, …params) {…})
实例:为表达式的值添加前后缀的过滤器
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <div id="app">
- <h2>过滤器</h2>
- <!-- 输出:vue-filters.js -->
- <p>{{ filename | format('vue', suffix) }}</p>
- </div>
- <script src="VueJs/vue.js"></script>
- <script>
- Vue.filter('format', function (value, prefix, suffix) {
- if (!value) return '';
- value = value.toString();
- return prefix + "-" + value + "." + suffix;
- })
- let vm = new Vue({
- el: '#app',
- data: {
- filename: 'filters',
- suffix: 'js'
- },
- computed: { // 计算属性,多次调用,只计算一次
- },
- methods: { // 普通方法,多次调用,多次计算
- },
- filters: { // 过滤器
- }
- })
- </script>
- </body>
- </html>
3、过滤器的串联
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- <style>
- .profile {}
- </style>
- </head>
- <body>
- <div id="app">
- <h2>过滤器</h2>
- <!-- 输出结果:DLROW OLLEH -->
- <p>{{ message | uppercase | reverse }}</p>
- </div>
- <script src="VueJs/vue.js"></script>
- <script>
- Vue.filter('uppercase', function (value) {
- if (!value) return '';
- value = value.toString();
- return value.toUpperCase();
- })
- Vue.filter('reverse', function (value) {
- if (!value) return '';
- value = value.toString();
- return value.split('').reverse().join('');
- })
- let vm = new Vue({
- el: '#app',
- data: {
- message: 'hello world'
- },
- computed: { // 计算属性,多次调用,只计算一次
- },
- methods: { // 普通方法,多次调用,多次计算
- },
- filters: { // 局部过滤器
- }
- })
- </script>
- </body>
- </html>
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |