Vue笔记【八】【列表过滤】【列表排序】【表单数据收集】【Vue命令】

16 列表过滤

对列表进行过滤,筛选符合条件的结果

16.1监视实现
16.1.1示例代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script type="text/javascript" src="../js/vue.js"></script>
</head>

<body>
    <!-- 准备好一个容器-->
    <div id="root">
        <h1>{{msg}}</h1>
        <input type="text" placeholder="请输入:" v-model="keyword">
        <table border="1px">
            <tr>
                <th>序号</th>
                <th>英雄</th>
                <th>能量</th>
                <th>选择</th>
            </tr>
            <tr v-for="(hero,index) in filteredHeros" :key="hero.id">
                <td>{{index+1}}</td>
                <td>{{hero.name}}</td>
                <td>{{hero.power}}</td>
                <td><input type="checkbox"></td>
            </tr>
        </table>
    </div>
</body>

<script type="text/javascript">
    Vue.config.productionTip = false  //阻止vue在启动时生成生产提示
    //创建Vue实例
    new Vue({
        el: '#root',
        data: {
            msg: '列表过滤',
            heros: [
                { id: '101', name: '艾格文', power: 10000 },
                { id: '102', name: '麦迪文', power: 9000 },
                { id: '103', name: '古尔丹', power: 8000 },
                { id: '104', name: '萨尔', power: 6000 }
            ],
            keyword: '',
            filteredHeros: []
        },
        watch: {
            keyword: {
                immediate: true,
                handler(val) {
                    this.filteredHeros = this.heros.filter((hero) => {
                        return hero.name.indexOf(val) >= 0
                    })
                }
            }
        }
    });
</script>

</html>
16.1.2运行结果

在这里插入图片描述

16.2计算属性实现
16.2.1示例代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script type="text/javascript" src="../js/vue.js"></script>
</head>

<body>
    <!-- 准备好一个容器-->
    <div id="root">
        <h1>{{msg}}</h1>
        <input type="text" placeholder="请输入:" v-model="keyword">
        <table border="1px">
            <tr>
                <th>序号</th>
                <th>英雄</th>
                <th>能量</th>
                <th>选择</th>
            </tr>
            <tr v-for="(hero,index) in filteredHeros" :key="hero.id">
                <td>{{index+1}}</td>
                <td>{{hero.name}}</td>
                <td>{{hero.power}}</td>
                <td><input type="checkbox"></td>
            </tr>
        </table>
    </div>
</body>

<script type="text/javascript">
    Vue.config.productionTip = false  //阻止vue在启动时生成生产提示
    //创建Vue实例
    new Vue({
        el: '#root',
        data: {
            msg: '列表过滤',
            heros: [
                { id: '101', name: '艾格文', power: 10000 },
                { id: '102', name: '麦迪文', power: 9000 },
                { id: '103', name: '古尔丹', power: 8000 },
                { id: '104', name: '萨尔', power: 6000 }
            ],
            keyword: '',
        },
        computed: {
            filteredHeros() {
                return this.heros.filter((hero) => {
                    return hero.name.indexOf(this.keyword) >= 0
                })
            }
        }
    });
</script>

</html>

运行结果如上

17 列表排序
17.1示例代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script type="text/javascript" src="../js/vue.js"></script>
</head>

<body>
    <!-- 准备好一个容器-->
    <div id="root">
        <h1>{{msg}}</h1>
        <input type="text" placeholder="请输入:" v-model="keyword"><br><br>
        <button @click="type = 1">升序</button>
        <button @click="type = 2">降序</button>
        <button @click="type = 0">原序</button>
        <table border="1px">
            <tr>
                <th>序号</th>
                <th>英雄</th>
                <th>能量</th>
                <th>选择</th>
            </tr>
            <tr v-for="(hero,index) in filteredHeros" :key="hero.id">
                <td>{{index+1}}</td>
                <td>{{hero.name}}</td>
                <td>{{hero.power}}</td>
                <td><input type="checkbox"></td>
            </tr>
        </table>
    </div>
</body>

<script type="text/javascript">
    Vue.config.productionTip = false  //阻止vue在启动时生成生产提示
    //创建Vue实例
    new Vue({
        el: '#root',
        data: {
            msg: '列表过滤',
            type: 0,
            heros: [
                { id: '101', name: '艾格文', power: 10000 },
                { id: '102', name: '麦迪文', power: 9000 },
                { id: '103', name: '古尔丹', power: 8000 },
                { id: '104', name: '萨尔', power: 11000 }
            ],
            keyword: '',
        },
        computed: {
            filteredHeros() {
                const arr = this.heros.filter((hero) => {
                    return hero.name.indexOf(this.keyword) >= 0
                })
                // 排序
                if (this.type === 1) {
                    arr.sort((a, b) => {
                        return a.power - b.power
                    })
                } else if (this.type == 2) {
                    arr.sort((a, b) => {
                        return b.power - a.power
                    })
                }
                return arr;
            }
        }
    });
</script>

</html>
17.2运行结果

在这里插入图片描述

18 表单数据的收集
18.1文本密码数字输入框
用户名:<input type="text" v-model.trim="vue中绑定的属性">
密码:<input type="password" v-model="vue中绑定的属性">
年龄:<input type="number" v-model.number="vue中绑定的属性">

v-model双向数据绑定,默认是获取value的值,trim作用是去除空格

number表示获取的为数字

18.2 单选框
性别:
    男<input type="radio" name="gender" value="1" v-model="vue中绑定的属性"><input type="radio" name="gender" value="0" v-model="vue中绑定的属性"><br><br>

v-model双向数据绑定,默认是获取value的值,不设置value的话默认提交的是null,所以这里我们要设置value属性并且给出要提交的值

18.3 复选框
爱好:
   旅游<input type="checkbox" v-model="vue中绑定的属性" value="travel">
   运动<input type="checkbox" v-model="vue中绑定的属性t" value="sport">
   唱歌<input type="checkbox" v-model="vue中绑定的属性" value="sing"><br><br>

注意:对于checkbox来说,如果没有手动指定value,那么会拿这个标签的checked属性的值作为value

18.4 下拉列表
学历:
    <select v-model="user.grade">
      <option value="">请选择学历</option>
      <option value="zk">专科</option>
      <option value="bk">本科</option>
      <option value="ss">硕士</option>
    </select><br><br>

注意:v-model双向数据绑定,默认是获取value的值,不设置value默认获取的是option标签之间的value

18.5 文本域
简介:
    <textarea cols="50" rows="15" v-model.lazy="vue中绑定的属性"></textarea><br><br>
18.6 form表单如何取消提交

我们大多数向后台提交数据一般都是异步请求,这时我们就需要阻止from表单默认的提交方式

第一种方式

<form @submit.prevent="处理方法">
</form>

第二种方式

form表单的提交按钮设置为以下方式

<button @click.prevent="处理方法">注册</button>
18.7 如何传json格式的字符串

为了防止向后台提交数据时把msg也传过去,我们可以把需要向后台提交的数据封装到一个对象中

<form>
    ...
    <button @click.prevent="send">注册</button>
</form>
<script>
        const vm = new Vue({
            el: '#app',
            data: {
                user: {
                    username: '',
                    password: '',
                    age: '', 
                    gender: '',
                    interest: [],//复选框选择的数据可以放在数组中
                    grade: 'ss',
                    introduce: '',
                    accept: ''
                },
                msg: '表单数据的收集'
            },
            methods: {
                send() {
                    alert('ajax...!!!!')
                    // 将数据收集好,发送给服务器。
                    console.log(JSON.stringify(this.user))
                }
            }
        })
    </script>
19 Vue的一些指令
19.1 v-test

这个指令就相当于原生JS中的innerText,

用法:

<h1 v-text="Vue中配置的属性"></h1>
19.2 v-html

这个指令就相当于原生JS中的innerHtml,这个不建议用,容易造成代码恶意注入

<h1 v-html="vue注册的属性"></h1>
19.3 v-cloak

这个指令作用是防止页面在加载时出现{{}}的情况,一般搭配style使用

<style>
        [v-cloak] {
            display: none;
        }
</style>

 <div id="">
     <h1 v-cloak>{{vue中注册的属性}}</h1>
 </div>
19.4 v-pre

使用该指令可以提高编译速度。带有该指令的标签将不会被编译。可以在没有 Vue 语法规则的标签中使用

可以提高效率。不要将它用在带有指令语法以及插值语法的标签中

<h1 v-pre>{{vue中注册的属性}}</h1>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值