zoukankan      html  css  js  c++  java
  • 77、Vue对象提供的属性功能

    一、过滤器

      过滤器就是Vue允许开发者在输出内容和操作数据中,自定义的文本格式化函数

      过滤器分为全局过滤器和局部过滤器

    1.1、全局过滤器  Vue.filter()

      先定义两个函数名

      在全局中使用vue.filter(),用来限制其中一个函数

    <body>
        <div id="app">
            <p>{{price}}</p>
            <p>{{price|format}}</p>
        </div>
        <script>
         Vue.filter("format",function(money){
         return money.toFixed(2)+"元"; // js中提供了一个toFixed方法可以保留2位小鼠
          });
            var vm = new Vue({
                el:"#app",  // vm的模板对象
                data:{      // vm的数据
                    price: 8.156333,
                },
                methods:{}, // vm的方法
            });
        </script>
    </body>

    1.2、局部过滤器

      局部过滤则是在Vue对象中,使用属性filter来使用

    <body>
        <div id="app">
            <p>{{price}}</p>
            <p>{{price|format}}</p>
        </div>
        <script>
            var vm = new Vue({
                el:"#app",  // vm的模板对象
                data:{      // vm的数据
                    price: 8.156333,
                },
                methods:{}, // vm的方法
    
                // 局部过滤器只能在当前vm对象中使用
                filters:{
                    format(money){
                        return money.toFixed(2)+"";
                    }
                }
            });
        </script>
    </body>

    二、计算属性与监听属性

    2.1、计算属性 computed

      Vue对象专门为计算功能划分了一个属性computed

      parseFloat:将数据转换成浮点型

      parseInt:将数据转换成整型

    <body>
        <div id="app">
            <input type="text" v-model="num1">+
            <input type="text" v-model="num2">=<span>{{total}}</span>
        </div>
        <script>
            var vm = new Vue({
                el:"#app",  // vm的模板对象
                data:{      // vm的数据
                    num1: 0,
                    num2: 0,
                },
                methods:{}, // vm的方法
                computed:{  // 计算属性,相当于创建一个新的变量保存数据计算的结果
                    total(){
                        // parseFloat 把数据转换成浮点数
                        // parseInt   把数据转换成整数
                        return parseFloat(this.num1)+parseFloat(this.num2);
                    }
                }
            });
        </script>
    </body>

    2.2、监听属性   watch

      监听属性watch是一个对象,监听的是对象或者变量,值通常为函数,,当监听对象发生变化时,会调用该函数

      watch有两个参数,第一个为未改变前的数据值,第二个为改变后的数据值

    <body>
        <div id="app">
            <button @click="num++">赞({{num}})</button>
        </div>
        <script>
            var vm = new Vue({
                el:"#app",  // vm的模板对象
                data:{      // vm的数据
                    num: 0,
                },
                watch:{ // 侦听属性,监听指定变量的值是否发生变化,当发生变化时调用对应的方法
                    num(v1,v2){
                        if(this.num>=5){
                            this.num=5;
                        }
                        console.log(this.num,"修改后num="+v1,"修改前num="+v2);
                    }
                }
            });
        </script>
    </body>

    三、Vue的生命周期

      Vue在创建对象的时候都会进行一系列的初始化过程,在这个过程中Vue.js会自动执行一些叫做生命周期的钩子函数

      我们可以在是使用这些函数,在特定的生命周期填放编写的代码,实现特定的功能。

      在vue使用的过程中,如果要初始化操作,把初始化操作的代码放在 mounted 中执行。
      mounted阶段就是在vm对象已经把data数据实现到页面以后。一般页面初始化使用。例如,用户访问页面加载成功以后,就要执行的ajax请求。

      另一个就是created,这个阶段就是在 vue对象创建以后,把ajax请求后端数据的代码放进 created

    <body>
        <div id="app">
            <p @click="num++">{{num}}</p>
        </div>
        <script>
            var vm = new Vue({
                el:"#app",
                data:{
                    num: 10,
                },
                // beforeCreate(){
                //     console.log("----vm对象初始化完成之前自动执行的代码----");
                //     console.log(this.$el);
                //     console.log(this.$data);
                // },
                created(){ // 这里主要实现到服务端获取页面数据[ajax]
                    console.log("----vm对象初始化完成以后自动执行的代码----");
                    console.log(this.$el); // 没有查找到vm需要控制的元素
                    console.log(this.$data); // 已经把data模型中的数据注入到vm对象里面作为属性了
                },
                // beforeMount(){
                //     console.log("----vm数据渲染到html模板之前执行的代码----");
                //     console.log(this.$el); // 没有查找到vm需要控制的元素
                // },
                mounted(){ // 修改页面的内容[页面特效]
                    console.log("----vm数据渲染到html模板之后执行的代码----");
                    console.log(this.$el); // 没有查找到vm需要控制的元素
                },
                // beforeUpdate(){
                //     console.log("----数据更新了,渲染之前执行的代码------");
                //     console.log(this.num);
                //     console.log(this.$el.innerHTML);
                // },
                // updated(){
                //     console.log("----数据更新了,渲染之后执行的代码------");
                //     console.log(this.num);
                //     console.log(this.$el.innerHTML);
                // },
                // 销毁vm对象 vm.$destroy()
                beforeDestroy(){
                    console.log("--- 当vm对象被销毁之前,会自动执行这里的代码 ---");
                    console.log( this );
                },
                destroyed(){
                    console.log("--- 当vm对象被销毁以后,会自动执行这里的代码 ---");
                }
            });
        </script>
    </body>

    四、阻止事件冒泡以及刷新页面

    4.1、冒泡事件

      冒泡事件:指的是js中通过子元素触发之后,导致父元素也触发了

        优点:正确利用该特点,实现事件委托,提升特效的性能

        缺点:没有正确的使用,容易出现bug

      阻止冒泡事件:使用.sport

    <head>
        <meta charset="UTF-8">
        <title>事件冒泡</title>
        <style>
        .box1{
            width: 400px;
            height: 300px;
            background-color: orange;
            padding-top: 100px;
        }
        .box2{
            width: 200px;
            height: 200px;
            background-color: #000;
            margin: auto;
        }
        </style>
        <script src="vue.js"></script>
    </head>
    <body>
        <div id="app" class="box1" @click="show('点击了box1')">
            <div class="box2" @click.stop="show('点击了box2')"></div>
        </div>
        <script>
        // vue本质上就是js,所以vue中的事件操作也会存在事件冒泡现象
        // 可以使用辅助指令 @click.stop来阻止事件冒泡
        var vm = new Vue({
            el:"#app",
            methods:{
                show(message){
                    alert(message);
                }
            }
        })
        </script>
    </body>

    4.2、阻止页面刷新

      使用.prevent来阻止页面的刷新,辅助指令可以一起使用,即.sport.prevent,即可以在阻止页面刷新也可以阻止冒泡事件

    <body>
        <div id="app">
            <!-- 辅助指令可以多个链式调用 -->
            <a href="http://www.baidu.com" @click.stop.prevent="show">百度</a>
        </div>
        <script>
        // vue本质上就是js,所以vue中的事件操作也会存在事件冒泡现象
        // 可以使用辅助指令 @click.stop来阻止事件冒泡
        var vm = new Vue({
            el:"#app",
            methods:{
                show(){
    
                }
            }
        })
        </script>
    </body>

    五、综合案例

      vue中的查看,增加,删除,移动功能

      使用input以及a标签设置按键并且跳转

      在vm的方法methods中,添加add,del,up,down功能

      add:获取input框中的信息,使用.push添加,需要清空input框中的信息,赋值为空

      del:获取input框信息,使用.splice(index,1)删除,index为改行信息

      up:上移,将该行清除,并赋值为一个变量current,通过该变量利用.splice(index-1,0,current)替换

      down:下移,将改行清楚,并赋值为一个变量current,通过该变量利用.splice(index+1,0,current)替换

    <head>
        <meta charset="UTF-8">
        <title>todolist</title>
        <style type="text/css">
            .list_con{
                width:600px;
                margin:50px auto 0;
            }
            .inputtxt{
                width:550px;
                height:30px;
                border:1px solid #ccc;
                padding:0px;
                text-indent:10px;
            }
            .inputbtn{
                width:40px;
                height:32px;
                padding:0px;
                border:1px solid #ccc;
            }
            .list{
                margin:0;
                padding:0;
                list-style:none;
                margin-top:20px;
            }
            .list li{
                height:40px;
                line-height:40px;
                border-bottom:1px solid #ccc;
            }
    
            .list li span{
                float:left;
            }
    
            .list li a{
                float:right;
                text-decoration:none;
                margin:0 10px;
            }
        </style>
        <script src="vue.js"></script>
    </head>
    <body>
        <div class="list_con" id="app">
            <h2>To do list</h2>
            <input type="text" v-model="content" id="txt1" class="inputtxt">
            <input type="button" @click="add" value="增加" id="btn1" class="inputbtn">
    
            <ul id="list" class="list">
                <!-- javascript:; # 阻止a标签跳转 -->
                <li v-for="item,index in todolist">
                    <span>{{item}}</span>
                    <a href="javascript:;" class="up" @click="up(index)"></a>
                    <a href="javascript:;" class="down" @click="down(index)"></a>
                    <a href="javascript:;" class="del" @click="del(index)">删除</a>
                </li>
            </ul>
        </div>
        <script>
            var vm = new Vue({
                el:"#app",
                data:{
                    content: "",
                    todolist: ["学习html","学习css","学习javascript"],
                },
                methods:{
                    add(){
                        // 添加计划
                        this.todolist.push(this.content);
                        // 清空单行文本框中的信息
                        this.content="";
                    },
                    del(index){
                        // 删除计划
                        this.todolist.splice(index,1);
                    },
                    up(index){
                        // 向上移动计划
                        let current = this.todolist.splice(index,1)[0];
                        this.todolist.splice(index-1, 0, current);
                    },
                    down(index){
                        // 向下移动计划
                        let current = this.todolist.splice(index,1)[0];
                        this.todolist.splice(index+1,0,current);
                    }
                }
            })
        </script>
    </body>
  • 相关阅读:
    oracle RAC 更换IP
    12C oracle 12.1.0.2版本打补丁
    node name配置错误,导致grid日志在报警
    input_subsys 输入子系统框架分析
    www.bing.com
    getopt函数使用说明
    FreeType 矢量字体 测试移植(1)
    字符的编码方式
    在开发板上显示字符和中文
    块设备驱动程序的框架
  • 原文地址:https://www.cnblogs.com/jingpeng/p/13155524.html
Copyright © 2011-2022 走看看