• 3. Vue对象提供的属性功能


     本节内容:

       一、过滤器

        1.1 使用Vue.filter()进行全局定义

        1.2 在vue对象中通过filters属性来定义

      二、计算属性

      三、监听属性

      四、vue对象的生命周期钩子函数

      五、阻止事件冒泡

     

     

    一 、 过滤器

    过滤器,就是vue允许开发者自定义的文本格式化函数,可以使用在两个地方:输出内容和操作数据中。

    定义过滤器的方式有两种,全局和局部过滤器

    1.1 使用Vue.filter()进行全局定义

    Vue.filter("RMB1", function(v){
          //就是来格式化(处理)v这个数据的
          if(v==0){
                return v
          }
    
          return v+"元"
    })

    1.2 在vue对象中通过filters属性来定义

    var vm = new Vue({
      el:"#app",
      data:{},
      filters:{
        RMB2:function(value){
          if(value==''){
            return;
          }else{
              return '¥ '+value;
          }
        }
        }
    });
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .c1{
                background-color: green;
            }
        </style>
    </head>
    <body>
    
    <!--<div id="app2"></div>-->
    
    <div id="app">
    
    <!--    <h1>{{num}} 元</h1>-->
        <h1>{{num|rmb}} 元</h1>
    <!--    <h1>{{num|yuan|yuan2}}</h1>  过滤器的使用和多层嵌套-->
    <!--    <h1>{{num|yuan('xxx','ooo')}}</h1>  过滤器的使用多个参数-->
    
    </div>
    
    </body>
    <script src="vue.js"></script>
    <script>
        // 全局过滤器:在任意vue对象中都可以直接使用
        // let vm2 = new Vue({
        //     el:'#app2'
        // })
    
        Vue.filter('rmb',function (val) {
    
            return val + 'rmb'
        })
    
    
        let vm = new Vue({
            el:'#app',  // 圈地
            data(){
                return {
                   msg:'hello',
                   num:100,
    
                }
            }, // 数据属性
            methods:{ // 声明方法
    
            },
            
            // 局部过滤器,只能在当前vue对象中使用
            filters:{
                yuan(val,m,n){
                    // val是需要加工的数据
                    return val + '' + m + n
                },
                yuan2(val){
                    // val是需要加工的数据
                    return val + ''
                }
            }
    
        })
    例子1

    二、计算属性

    我们之前学习过字符串反转,如果直接把反转的代码写在元素中,则会使得其他同事在开发时时不易发现数据被调整了,

    所以vue提供了一个计算属性(computed),可以让我们把调整data数据的代码存在在该属性中。其实计算属性主要用于

    监听,可以监听多个对象,后面学了监听之后再说。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
    </head>
    <body>
    
    <div id="app">
        <h2>{{num}}</h2>
        <h2>{{xx}}</h2>
    
    </div>
    
    
    </body>
    <script src="../vue.js"></script>
    <script>
        let vm  = new Vue({
            el:'#app',
            data(){
                return {
                    num:100,
                    num2:20,
                }
            },
            filters:{},
            computed:{
                xx:function () {
                    //
                    let s = this.num + this.num2
    
                    return s.toFixed(2)
                }
    
            }
    
    
    
        })
    
    
    
    </script>
    
    
    </html>
    View Code
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="js/vue.js"></script>
        <script src="js/filters.js"></script>
    </head>
    <body>
    
        <div id="app">
            原价格:{{price|k2}}<br>
            折扣价:{{new_price}}<br>
        </div>
    
        <script>
    
            var vm1 = new Vue({
                el:"#app",
                data:{
                    price: 20.3,
                    sale: 0.6,
                },
               // methods:{}
                // 过滤器
                filters:{
                    k2(value){
                        return value.toFixed(2)
                    }
                },
                // 计算属性
                computed:{
                    new_price(){
                        return (this.price*this.sale).toFixed(2);
                    }
                }
            })
        </script>
    
    </body>
    </html>
    滤器和计算属性的简单对比

    三、监听属性

    侦听属性,可以帮助我们侦听data某个数据的变化,从而做相应的自定义操作。侦听属性是一个对象,

    它的键是要监听的对象或者变量,值一般是函数,当侦听的data数据发生变化时,会自定执行的对应函数,

    这个函数在被调用时,vue会传入两个形参,第一个是变化后的数据值,第二个是变化前的数据值。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
    </head>
    <body>
    
    <div id="app">
        <h2>{{num}}</h2>
        <button @click="num++">+1</button>
    
    </div>
    
    
    </body>
    <script src="../vue.js"></script>
    <script>
        let vm  = new Vue({
            el:'#app',
            data(){
                return {
                    num:100,
    
                }
            },
            filters:{},
            watch:{
                // 'num':function (newval,oldval) {
                //     // newval变化后的值
                //     // oldval变化前的值
                //
                //     console.log(newval,oldval);
                //
                // },
                num(newval,oldval){
                    console.log(newval,oldval);
    
                },
                // num2(newval,oldval){
                //     console.log(newval,oldval);
                //
                // }
            },
    
    
    
        })
    
    
    
    </script>
    
    
    </html>
    View Code

    使用数据属性中的某个属性的时候,如果使用的是该数据中的内部属性,别忘了加双引号

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="js/vue.js"></script>
        <script src="js/filters.js"></script>
    </head>
    <body>
    
        <div id="app">
            <form action="">
                账号:<input type="text" v-model="form.username"><span :style="user_style">{{user_text}}</span><br><br>
                密码:<input type="password" v-model="form.password"><br><br>
                确认密码:<input type="password" v-model="form.password2"><br><br>
            </form>
        </div>
    
        <script>
    
            var vm1 = new Vue({
                el:"#app",
                data:{
                    form:{
                        username:"",
                        password:"",
                        password2:"",
                    },
                    user_style:{
                        color: "red",
                    },
                    user_text:"用户名长度只能是4-10位"
                },
                // 监听属性
                // 监听属性的变化
                watch:{
                    "form.username":function(value){ //注意,使用数据属性中的某个属性的时候,如果使用的是该数据中的内部属性,别忘了加双引号
                        if(value.length>=4 && value.length<=10){
                            this.user_style.color="blue";
                            this.user_text="用户名长度合法!";
                        }else{
                            this.user_style.color="red";
                            this.user_text="用户名长度只能是4-10位!";
                        }
                    }
                }
            })
        </script>
    
    </body>
    </html>
    View Code

    四、vue对象的生命周期钩子函数

    每个Vue对象在创建时都要经过一系列的初始化过程。在这个过程中Vue.js会自动运行一些叫做

    生命周期的的钩子函数,我们可以使用这些函数,在对象创建的不同阶段加上我们需要的代码,

    实现特定的功能。

    vue 生命周期 1、创建一个vue对象  => vue加载数据属性(data中的值)=>vue加载视图属性(html标签)

    => vue数据驱动属性讲数据渲染到html标签

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    
    </head>
    <body>
    
    <div id="app">
        <h2>{{num}}</h2>
    
    
    </div>
    
    
    </body>
    <script src="../vue.js"></script>
    <script>
        let vm  = new Vue({
            el:'#app',
            data(){
                return {
                    num:100,
    
                }
            },
            filters:{},
            // 视图(html标签)和数据属性,还没有加载给vue对象时触发的
            beforeCreate:function () {
                console.log(this.$el); // undefined
                console.log(this.$data); // undefined
            },
            // vue对象加载上数据属性之后,自动触发的函数
            created:function () {
                console.log(this.$el); // undefined
                console.log(this.$data); // num: 100
                 // console.log(this.num)
                //  一般我们会在这个方法中进行网络请求,请求后台的数据,对数据属性进行修改
                // 发送ajax请求去后台要数据,然后赋值给某个数据属性
    
            },
            // vue加载视图之后触发的
            beforeMount:function () {
                console.log(this.$el); // <h2>{{num}}</h2>
                console.log(this.num); // num: 100
            },
    
            // 数据驱动到视图之后触发的
            mounted:function () {
                console.log(this.$el); // <h2>100</h2>
                console.log(this.$data);
                console.log(this.num)// num: 100
            }
    
        })
    
    
    </script>
    
    
    </html>
    View Code

    五、阻止事件冒泡

    使用.stop和.prevent

    嵌套标签中 ,点击父标签和点击子标签都被定义会触发事件,当点击子标签时就会直接触发父标签的效果,

    这个过程就叫做事件冒泡

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .c1{
                background-color: red;
                height: 200px;
            }
            .c2{
                background-color: blue;
                height: 100px;
                width: 100px;
            }
        </style>
    </head>
    <body>
    
    <div id="app">
    
        <div class="c1" @click="f1">
            <!-- 阻止事件冒泡 -->
            <div class="c2" @click.stop="f2"></div>
    <!--        <div class="c2" @click.stop="f2"></div>-->
    <!--        <div class="c2" @click.stop.prevent="f2"></div>-->
    
    <!--        <a href="http://www.baidu.com" @click.stop.prevent="">百度</a> 阻止标签自带的原有事件效果-->
        </div>
    
    </div>
    
    
    </body>
    <script src="../vue.js"></script>
    <script>
        let vm  = new Vue({
            el:'#app',
            data(){
                return {
                    num:100,
                    msg:'hello',
    
                }
            },
            methods:{
                f1(){
                    alert(111);
                },
                f2(){
                    alert(2222);
                }
            }
    
        })
    
    
    </script>
    
    
    </html>
    View Code
  • 相关阅读:
    0909 初识编译原理
    校园跳蚤市场-Sprint计划
    校园跳蚤市场
    5.2-5.3
    5.1封装
    阅读2
    汉堡包
    五章-问题
    结对子作业 四则运算 V2.0
    四则运算升级版
  • 原文地址:https://www.cnblogs.com/yj0405/p/14561969.html
Copyright © 2020-2023  润新知