zoukankan      html  css  js  c++  java
  • 列表渲染

    列表渲染数组

    我们用 v-for 指令根据一组数组的选项列表进行渲染。

     v-for 指令需要以 item in items 形式的特殊语法, items是源数据数组并且 item 是数组元素迭代的别名。

    你也可以用 of 替代 in 作为分隔符,因为它是最接近 JavaScript 迭代器的语法

    列表渲染对象

    也可以用 v-for 通过一个对象的属性来迭代,也可以提供第二个的参数为键名,第三个参数为索引

    列表渲染模板Template

    如同 v-if 模板,你也可以用带有 v-for 的 <template> 标签来渲染多个元素块

    列表渲染子组件

    父组件中引入一个子组件,并且在这个组件上执行列表渲染

    列表渲染整数

    v-for 也可以取整数。在这种情况下,它将重复多次模板

    v-for遍历并且更新数组中的数据

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>06_列表渲染</title>
    </head>
    <body>
    <div id="demo">
      <h2>测试: v-for 遍历数组</h2>
      <ul>
        <li v-for="(p, index) in persons" :key="index">
          {{index}}--{{p.name}}--{{p.age}}
          --<button @click="deleteP(index)">删除</button>
          --<button @click="updateP(index, {name:'Cat', age: 16})">更新</button>
        </li>
      </ul>
      <button @click="addP({name: 'xfzhang', age: 18})">添加</button>
    
    
      <h2>测试: v-for 遍历对象</h2>
      <ul>
        <li v-for="(item, key) in persons[1]" :key="key">{{key}}={{item}}</li>
      </ul>
    </div>
    <script type="text/javascript" src="../js/vue.js"></script>
    <script type="text/javascript">
      new Vue({
        el: '#demo',
        data: {
          persons: [
            {name: 'Tom', age:18},
            {name: 'Jack', age:17},
            {name: 'Bob', age:19},
            {name: 'Mary', age:16}
          ]
        },
    
        methods: {
          deleteP (index) {
            this.persons.splice(index, 1) // 调用了不是原生数组的splice(), 而是一个变异(重写)方法
          },
    
          updateP (index, newP) {
            this.persons.splice(index, 1, newP)
          },
    
          addP (newP) {
            this.persons.push(newP)
          }
        }
      })
    </script>
    </body>
    </html>

    实现列表的搜索和排序

    <template>
      <div id="app">
        <input type="text" v-model="searchName">
        <ul>
          <li v-for="(p, index) in filterPersons" :key="index">
            {{index}}--{{p.name}}--{{p.age}}
          </li>
        </ul>
        <div>
          <button @click="setOrderType(2)">年龄升序</button>
          <button @click="setOrderType(1)">年龄降序</button>
          <button @click="setOrderType(0)">原本顺序</button>
        </div>
      </div>
    </template>
    
    <script>
      export default {
        components: {
        },
        name: 'app',
        data () {
          return {
            searchName: '',
            orderType: 0, // 0代表不排序, 1代表降序, 2代表升序
            persons: [
              {name: 'Tom', age: 18},
              {name: 'Jack', age: 17},
              {name: 'Bob', age: 19},
              {name: 'Mary', age: 16}
            ]
          }
        },
        computed: {
          filterPersons () {
            const {searchName, persons, orderType} = this // 取出相关数据
            let arr = [...persons]
    
            if (searchName.trim()) { // 过滤数组,根据对象中的name来过滤
              arr = persons.filter(p => p.name.indexOf(searchName) !== -1)
            }
            // 排序
            if (orderType) {
              arr.sort(function (p1, p2) {
                if (orderType === 1) { // 降序
                  return p2.age - p1.age
                } else { // 升序
                  return p1.age - p2.age
                }
              })
            }
            return arr
          }
        },
        methods: {
          setOrderType (orderType) {
            this.orderType = orderType
          }
        }
      }
    </script>
    
    <style scoped>
    </style>

  • 相关阅读:
    HTTP 的学习
    标量方程求解
    限制器
    差分格式
    Archlinux的基本配置
    布拉休斯方程数值求解
    GNU大型项目构建和覆盖率生成(第一篇)
    plot3d网格读取写入与可视化
    abaqus中的约束
    向量范数和矩阵范数
  • 原文地址:https://www.cnblogs.com/LO-ME/p/10478529.html
Copyright © 2011-2022 走看看