zoukankan      html  css  js  c++  java
  • 前端学习五(vue高级特性)

    一、事件的参数传递

    示例为通过按钮删除一行v-for渲染出来的数据

    <body>
        <table id="app" border="">
            <tr>
                <th>id</th>
                <th>name</th>
                <th>tester</th>
                <th>project</th>
                <th>操作</th>
            </tr>
            <tr v-for="item in lists">
                <td>{{item.id}}</td>
                <td>{{item.name}}</td>
                <td>{{item.tester}}</td>
                <td>{{item.project}}</td>
                <td><button @click="del(item.id)">删除</button></td>
            </tr>
        </table>
        <script>
            var vm = new Vue({
                el: "#app",
                data: {
                    lists: [{
                        "id": 1,
                        "name": "登录接口1",
                        "tester": "测试人1",
                        "project": "自动化测试平台1"
                    },
                    {
                        "id": 2,
                        "name": "登录接口2",
                        "tester": "测试人2",
                        "project": "自动化测试平台2"
                    },
                    {
                        "id": 3,
                        "name": "登录接口3",
                        "tester": "测试人3",
                        "project": "自动化测试平台3"
                    }]
                },
                methods: {
                    del: function (id) {
                        console.log("点击了删除按钮", id);
                        // 方法一,filter
                        // this.lists = this.lists.filter(
                        //     function (item) {
                        //         return item.id != id
                        //     }
                        // )
                        // 方法二,找到索引,再删数据
                        const ind = this.lists.findIndex(function (item) {
                            return item.id === id
                        })
                        console.log("索引", ind);
                        // 第一个入参为索引,第二入参为从入参索引开始删除的个数
                        this.lists.splice(ind, 1)
                    }
                }
            })
        </script>
    </body>
    View Code

    二、事件修饰符

    https://cn.vuejs.org/v2/guide/events.html#%E4%BA%8B%E4%BB%B6%E4%BF%AE%E9%A5%B0%E7%AC%A6

    上一篇文章还有提到表单修饰符:https://cn.vuejs.org/v2/guide/forms.html#%E4%BF%AE%E9%A5%B0%E7%AC%A6

    <body>
        <div id="app">
            <div @click="work">
                <!-- 点击子元素也会触发父元素的事件
                事件修饰符:
                .stop ,阻止冒泡(事件冒泡:点击子元素,事件会一级一级冒泡到父元素)
                .prevent ,阻止事件的默认行为
                .capture ,添加事件监听器时使用事件捕获模式,即内部触发的事件优先在此处理,然后再内部处理
             -->
                <button type="button" @click.stop="work2()">按钮1</button>
            </div>
            <a href="https://www.baidu.com" @click.prevent="work3">百度</a>
        </div>
    
        <script>
            var vm = new Vue({
                el: "#app",
                data: {
    
                },
                methods: {
                    work: function () {
                        console.log("调用work方法");
                    },
                    work2: function () {
                        console.log("----work2---");
                    },
                    work3: function () {
                        console.log("----work3---");
                    }
                }
            }
            )
        </script>
    </body>
    View Code

    三、按键修饰符

    https://cn.vuejs.org/v2/guide/events.html#%E6%8C%89%E9%94%AE%E7%A0%81

    <body>
        <div id="app">
            <form action="">
                账号:<input type="text" v-model="loginForm.user">
                <br>
                <!-- 按键修饰符 -->
                密码:<input type="password" v-model="loginForm.pwd" 
                        @keyup.enter="login_btn()" @keyup.delete="del()">
                <br>
                <button type="button" @click="login_btn()">登录</button>
            </form>
        </div>
    
        <script>
            var vm = new Vue({
                el: "#app",
                data: {
                    loginForm: {
                        user: "",
                        pwd: ""
                    }
                },
                methods: {
                    login_btn: function () {
                        console.log("用户登录数据为:", this.loginForm);
                    },
                    del:function(){
                        this.loginForm.pwd=""
                    }
                }
            }
            )
        </script>
    </body>
    View Code

     四、计算属性computed、侦听属性watch

    <body>
        <div id="app">
            <div>
                <h3>订单</h3>
                <h5>商品名:{{name}}</h5>
                <h5>单价:{{price}}</h5>
                <h5>库存:{{stock}}</h5>
                <h5>
                    数量:
                    <button @click="sub">-</button>
                    {{num}}
                    <button @click="add">+</button>
                </h5>
                <hr>
                <h5>总价:{{priceSum}}</h5>
                <h5>总价:{{test}}</h5>
            </div>
            <hr>
            <form action="">
                账号:<input type="text" v-model="loginForm.user">
                <br>
                <!-- 按键修饰符 -->
                密码:<input type="password" v-model="loginForm.pwd" @keyup.enter="login_btn()" @keyup.delete="del()">
                <br>
                <button type="button" @click="login_btn()">登录</button>
            </form>
        </div>
    
        <script>
            var vm = new Vue({
                el: "#app",
                data: {
                    name: "西瓜",
                    num: 10,
                    price: 99,
                    stock: 20,
                    test: "990",
                    loginForm: {
                        user: "",
                        pwd: ""
                    }
                },
                methods: {
                    add: function () {
                        this.num += 1;
                        this.test = this.num * this.price
                    },
                    // 函数简写
                    sub() {
                        this.num -= 1;
                        this.test = this.num * this.price
                    },
                },
                // 定义计算属性
                computed: {
                    priceSum: function () {
                        return this.num * this.price
                    }
                },
                //定义侦听器,只能监听data里面的值是否发生变化
                watch: {
                    // 单层监听
                    num(newValue, oldValue) {
                        console.log(newValue, oldValue);
                        if (newValue < 0) {
                            this.num = 0
                        } else if (newValue > this.stock) {
                            this.num = this.stock
                        }
                    },
                    // 监听层级内的某个数据
                    'loginForm.user': function (newValue, oldValue) {
                        console.log(newValue, oldValue);
                    },
                    // 监听层级内的数据,示例监听的是loginForm整个对象
                    loginForm: {
                        handler:function(newValue, oldValue){
                            console.log("测试",newValue.user, oldValue.user);
                        },
                        // 不管层级有多深,都能监听到
                        deep:true
                    }
                }
            })
        </script>
    </body>
    View Code

    五、过滤器

    <body>
        <div id="app">
            <!-- 添加过滤器函数 -->
            <p :style="style|styleChange">{{price|doubleFloat}}</p>
        </div>
    
        <script>
            var vm = new Vue({
                el: "#app",
                data: {
                    price: 99,
                    style: "color:red"
                },
                // 过滤器(对传入的数据进行处理)
                filters: {
                    doubleFloat: function (value) {
                        return value.toFixed(2)
                    },
                    styleChange(value){
                        return "color:green"
                    }
                }
            })
        </script>
    </body>
    View Code
    一个只会点点点的测试,有疑问可以在测试群(群号:330405140)问我
  • 相关阅读:
    转:HTTP Get请求URL最大长度
    Android Paint Xfermode 学习小结
    转:Android-apt
    ajax方法携带授权标识
    获取iframe(angular 动态页面)高度
    IIS下配置跨域设置Access-Control-Allow-Origin
    Oracle 创建 Schema
    定时任务服务 CronService使用说明
    使用ADO.NET执行SQL脚本
    Nuget很慢,我们该怎么办
  • 原文地址:https://www.cnblogs.com/yinwenbin/p/15516619.html
Copyright © 2011-2022 走看看