zoukankan      html  css  js  c++  java
  • Vue基础-在模板中使用过滤器

    Vue 测试版本:Vue.js v2.5.13

    官网给了过滤器的两种使用方式:

    1、你可以在一个组件的选项中定义本地的过滤器:

    结合实例,我给两个代码:

    <div id="app">       
         <input 
         type="text" 
         v-model="id" 
         placeholder="please enter your id"
         />
         <p>your id is:  {{ id| formatId }}</p>
    </div>
    window.onload = function() {
        new Vue({
            el: '#app',
            data: {
                id: ''
            },
            filters: {
                formatId(v) {
                    return v.length < 10 && v.length > 0 ? v.padStart(10, '0') : v;
                }
            },
        });
    };

    2、在创建 Vue 实例之前全局定义过滤器:

    方式 2 换一种 js 就行,html 不用变:

    window.onload = function() {
        Vue.filter('formatId', function(v) {
            return v.length < 10 && v.length > 0 ? v.padStart(10, '0') : v;
        });
    
        new Vue({
            el: '#app',
            data: {
                id: ''
            },
        });
    };

    比较好理解,但是我觉得可以完善下,因为上面都没有用模板;

    如果用了模板,第一种就失效了,只有第二种可行:

    <div id="app">
         <my-ele :id="id"></my-ele>
    </div>
    window.onload = function() {
        Vue.component('my-ele', {       
            template: `
            <div>
              <input type="text" v-model="id"/>
              <p>you id:  {{id | formatId}}</p>
            </div>
            `,
            props: ['id']
        });
    
        Vue.filter('formatId', function(v) {
            return v.length < 10 && v.length > 0 ? v.padStart(10, '0') : v;
        });
    new Vue({
            el: '#app',
            data: {
                id: ''
            }
        });
    };

    虽然 开发环境下 会报错,但不影响功能,

    image

    如果把 js 换成第一种,就会失败:

    window.onload = function() {
        Vue.component('my-ele', {       
            template: `
            <div>
              <input type="text" v-model="id"/>
              <p>you id:  {{id | formatId}}</p>
            </div>
            `,
            props: ['id']
        });
    
        new Vue({
            el: '#app',
            data: {
                id: ''
            },
            filters: {
                formatId(v) {
                    return v.length < 10 && v.length > 0 ? v.padStart(10, '0') : v;
                }
            }
        });
    };

    功能失效;

    如果采用 render() 函数,就更复杂了些,详情戳 Vue-双向绑定:从 html 到 模板 到 渲染函数

    参考文档:

    https://cn.vuejs.org/v2/guide/filters.html

  • 相关阅读:
    [题解]AtCoder Beginner Contest 174
    [高精取模]
    C++知识点—对拍
    C++知识点 STL容器3—map && pair
    致远星的搜索战争 T3 星际穿梭 题解
    洛谷 7月月赛 Div.2 T1 可持久化动态仙人掌的直径问题
    T139631 T3 阶乘之和
    C++知识点 STL容器2—set
    【2020-08-10】轻易的评价反而会阻碍成长
    【2020-08-09】人生十三信条
  • 原文地址:https://www.cnblogs.com/xianshenglu/p/8485657.html
Copyright © 2011-2022 走看看