vue遍历(数组/对象/字符串/指定次数)v-for/过滤/排序综合实例
首页->学习资料->web前端->vue教程->vue2 关键词: 发布时间:2024-01-04 00:35:24 浏览次数:419

image.png

image.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>p28-32:vue列表渲染/过滤/排序综合实例</title>
    <script type="text/javascript" src="js/vue.js"></script>
</head>

<body>


<div id="demo">
    <!--index为数组或对像的索引.但是添加数据的时候可能导致数据错乱:key一般要用数据的唯一标识,如数据库的id-->
    <div>
        <input type="text" v-model="keyword" placeholder="计算属性实现过滤查询">
        <button @click="sortType=2">年龄升序</button>
        <button @click="sortType=1">年龄降序</button>
        <button @click="sortType=0">年龄原序</button>
        <dl>
            <dt>遍历数组 in方式 computedFilterPersons,它是通过计算属性过滤后的数据</dt>
            <dd v-for="(person,index) in computedFilterPersons" :key="person.id">
                {{index}}:{{person.id}}--{{person.name}}-{{person.age}}
                <input type="text">
            </dd>
        </dl>
    </div>
    <hr/>
    <div>
        <input type="text" v-model="keyword" placeholder="监视实现过滤查询">
        <dl>
            <dt>遍历数组 in方式 filterPersons,它是过滤后的数据</dt>
            <dd v-for="(person,index) in filterPersons" :key="person.id">
                {{index}}:{{person.id}}--{{person.name}}-{{person.age}}
                <input type="text">
            </dd>
        </dl>
    </div>
    <hr/>
    <div>
        <dl>
            <dt>遍历数组 in方式 persons</dt>
            <dd v-for="(person,index) in persons" :key="person.id">
                {{index}}:{{person.id}}--{{person.name}}-{{person.age}}
                <input type="text">
            </dd>
        </dl>
        <button @click.once="addPerson">添加一个李四</button>
    </div>
    <hr/>
    <dl>
        <dt>遍历数组 of 方式</dt>
        <dd v-for="(person,index) of persons" :key="person.id">
            <p>{{index}}:{{person.id}}--{{person.name}}-{{person.age}}</p>
        </dd>
    </dl>

    <dl>
        <dt>遍历对象</dt>
        <dd v-for="(value,key) of man" :key="key">
            <p>{{key}}:{{value}}--{{key}}</p>
        </dd>
    </dl>

    <dl>
        <dt>遍历字符串</dt>
        <dd v-for="(value,key) of str" :key="key">
            <p>{{key}}:{{value}}--{{key}}</p>
        </dd>
    </dl>

    <dl>
        <dt>遍历指定次数</dt>
        <dd v-for="(value,key) of 5" :key="key">
            <p>{{key}}:{{value}}--{{key}}</p>
        </dd>
    </dl>

</div>
<script type="text/javascript">
    //创建vue实例
    const vm = new Vue({
        el: "#demo",
        data: {
            keyword: '',//过滤查询关键词
            sortType: 0,//排序:1降序,0原序,2升序
            //数组
            persons: [
                {
                    'id': '001',
                    'name': '张三',
                    'age': '20'
                },
                {
                    'id': '002',
                    'name': '刘秀',
                    'age': '35'
                }
            ],
            //用于查询过滤的数据
            filterPersons: [],
            //对象
            man: {
                name: '李四',
                'age': 20,
            },
            //对符串
            str: 'hello'
        },
        methods: {
            addPerson() {
                const p = {
                    'id': '003',
                    'name': '李四',
                    'age': '18'
                }
                this.persons.unshift(p)
                this.filterPersons = this.persons
            }
        },
        //computed中定义计算属性,计算属性会有缓存,模板中多次调用get时只会计算一次,效果更高,如果用methods则每次都会调用
        computed: {
            computedFilterPersons() {
                //这个是查询过滤后的数据
                const searchResult = this.persons.filter((p) => {
                    return p.name.indexOf(this.keyword) !== -1;
                })
                //对查询过后数据排序
                if (this.sortType) {
                    /**
                     * arrayObject.sort(sortby);参数sortby可选。规定排序顺序。必须是函数;
                     注意:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较
                     如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b(a代表当前比较数的下一个比较数,b代表当前比较数):
                     比较函数应该具有两个参数 a 和 b,其返回值如下:
                     若 a 小于 b,即 a - b 小于零,则返回一个小于零的值,数组将按照升序排列。
                     若 a 等于 b,则返回 0。
                     若 a 大于 b, 即 a - b 大于零,则返回一个大于零的值,数组将按照降序排列。
                     */
                    searchResult.sort((a, b) => {
                        return this.sortType === 1 ? b.age - a.age : a.age - b.age;
                    })
                }
                return searchResult;
            }
        },
        watch: {
            //过滤查询,这样写首页进入页面的时候由于filterPersons为空,页面上是没有显示的
            // keyword(newValue, oldValue) {
            //     console.log('输入查询词发生变化');
            //     //filter过滤不影响原数据,返回的是一个新的数组,所以不能赋值给persons,不然原数据会破坏
            //     this.filterPersons = this.persons.filter((p) => {
            //         //只返回name中包含keyword的数据
            //         return p.name.indexOf(newValue) !== -1
            //     })
            // }
            keyword: {
                immediate: true,//加了这个后首页加载的时候就会运行一次,页面上就有数据了
                handler(newValue) {
                    this.filterPersons = this.persons.filter((p) => {
                        return p.name.indexOf(newValue) !== -1
                    })
                }
            }
        },
    })

</script>
</body>
</html>


赞:(0)
踩:(0)
相关文章
初识vue
数据绑定:第一个vue例子
vue模板语法
vue数据绑定
el与data的两种写法/延迟挂载
vue数据代理-Object.definePropert
vue事件及事件修饰符prevent/stop/
vue计算属性computed
vue(深度)监视属性watch
vue绑定样式:class,:style
热门文章
win7中将文件拷贝到虚拟机linux下
phpexcel设置行高及列宽,背景颜色,
rabbitmq无法启动
intellij idea不显示git push按钮
php7中使用mongodb的aggregate进行
laravel页面静态化的方法
centos7.4 64位下swoole安装及配置
navicate连接mycat报1184错误
curl设置超时不起作用(CURLOPT_TIM
devops-jenkins容器为pending状态
好评文章
phpexcel设置行高及列宽,背景颜色,
php7中使用mongodb的aggregate进行
intellij idea打开文件所在文件夹
windows下使用MongoDB Compass Com
win7中将文件拷贝到虚拟机linux下
laravel 中悲观锁 & 乐观锁的使用
单点登录sso原理及php实现方式及de
navicate连接mycat报1184错误
rabbitmq无法启动
laravel整合dingo/api方法步骤:jwt
标签
rabbitmq mysql备份 elasticsearch golang swoole
我的项目
【github】www.github.com/hurong241
【码云】gitee.com/hu_rong/projects
【docker hub】hub.docker.com/repositories/hurong241
【packagist】packagist.org/users/hurong241/packages
站点信息
建站时间:2011年
文章数:623篇
浏览数:1306209
粤ICP备18028092号-1  微信:hurong241