Vue计算属性和过滤器学习(二)

859 阅读2分钟

1.定义计算属性(computed)

<body>
    <div id="app">
        <p>{{name}}</p>
        <p>{{age + 10}}</p>
        <p>{{msg.split("").reverse()}}</p>
        <!-- 以上方式缺点:代码无提示,不方便 -->
        <p>{{msgc}}</p>
    </div>
</body>
<script>
    let vue = new Vue({
        el: "#app",
        data:{
            name: "yubaibai", 
            age: 110,
            msg: "kunming"
        },
        //专门用于定义计算属性的
        computed:{
            msgc:function(){
                return "abcdsfff".split("").reverse();
            }
        }
    })
</script>
  • 注意使用计算属性的时候不能在后面加(),因为他是一个属性,不是一个方法。

2.计算属性和函数的区别?

<body>
    <div id="app">
        <p>{{msgc}}</p>
        <p>{{msgc}}</p>
        <p>{{msgc}}</p>
        <p>{{getMessage()}}</p>
        <p>{{getMessage()}}</p>
        <p>{{getMessage()}}</p>
    </div>
</body>
<script>
    let vue = new Vue({
        el: "#app",
        data:{
            name: "yubaibai", 
            age: 110,
            msg: "kunming"
        },
        methods:{
          getMessage(){
              //函数调用每次都会执行
              console.log("函数执行次数");
              return "alibaba".split("").reverse();
          }  
        },
        //专门用于定义计算属性的
        computed:{
            msgc:function(){
                //只要返回的结果没有发生变化,那么计算属性指挥执行一次
                console.log("计算属性执行次数");
                return "abcdsfff".split("").reverse();
            }
        }
    })
</script>

应用场景:由于计算属性会将返回的结果缓存起来,所以如果返回的数据不经常发生变化,那么使用计算属性的性能要比使用函数的性能高。

2.过滤器

用于格式化文本内容

  • 全局过滤器
<!-- vue会把courseName交给过滤器处理之后再把结果插入到元素中 -->
<p>{{courseName | formatString}}</p>

<script>

    /*
    参数一:过滤器名称
    参数二:处理数据函数
    注意点:默认情况下处理数据的函数接受一个参数,就是当前要被处理的数据
    */
    Vue.filter('formatString',function(value){
        return value = value.replace(/课程/g,'学科');
    })

    let vue = new Vue({
        el: "#app",
        data:{
            name: "yubaibai", 
            age: 110,
            msg: "kunming",
            courseName:"物理课程  化学课程   生物课程  语文课程  英语课程  地理课程  政治课程"
        },
    })
  • 局部过滤器
<!-- vue会把courseName交给过滤器处理之后再把结果插入到元素中 -->
<p>{{courseName | formatString2}}</p>

<script>
    let vue = new Vue({
        el: "#app",
        data:{
            name: "yubaibai", 
            age: 110,
            msg: "kunming",
            courseName:"物理课程  化学课程   生物课程  语文课程  英语课程  地理课程  政治课程"
        },
        //专门用于定义局部过滤器
        filters:{
            "formatString2":function(value){
                return value = value.replace(/学科/g,'过滤器2');
            }
        },
    })
</script>

应用:时间格式化

 //时间格式化
Vue.filter('timeFormat',function(value,formString){
    let date = new Date(value);
    let year = date.getFullYear();
    let month = date.getMonth() + 1 + "";
    let day = date.getDate() + "";
    let hour = date.getHours() + "";
    let min = date.getMinutes() + "";
    let second = date.getSeconds() + "";
    if (formString && formString === "yyyy-MM-dd") {
        return `${year}-${month.padStart(2,'0')}-${day.padStart(2,'0')}`;
    }
    return `${year}-${month.padStart(2,'0')}-${day.padStart(2,'0')} ${hour.padStart(2,'0')}-${min.padStart(2,'0')}-${second.padStart(2,'0')}`;
})