• Vue.js 循环语句


    转自 https://www.runoob.com/vue3/vue3-v-for.html

    循环使用 v-for 指令。

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

    v-for 可以绑定数据到数组来渲染一个列表:

    v-for 实例

    <div id="app">
      <ol>
        <li v-for="site in sites">
          {{ site.text }}
        </li>
      </ol>
    </div>
    <script>
    const app = {
      data() {
        return {
          sites: [
            { text: 'Google' },
            { text: 'jd' },
            { text: 'Taobao' }
          ]
        }
      }
    }
    
    Vue.createApp(app).mount('#app')
    </script>

     

    v-for 还支持一个可选的第二个参数,参数值为当前项的索引:

    v-for 实例

    index 为列表项的索引值:

    <div id="app">
      <ol>
        <li v-for="(site, index) in sites">
          {{ index }} -{{ site.text }}
        </li>
      </ol>
    </div>
    <script>
    const app = {
      data() {
        return {
          sites: [
            { text: 'Google' },
            { text: 'JD' },
            { text: 'Taobao' }
          ]
        }
      }
    }
    
    Vue.createApp(app).mount('#app')
    </script>

    模板 <template> 中使用 v-for:

    v-for

    <div id="app">
        <ul>
          <template v-for="site in sites">
            <li>{{ site.text }}</li>
            <li>--------------</li>
          </template>
        </ul>
    </div>
    <script>
    const app = {
      data() {
        return {
          sites: [
            { text: 'Google' },
            { text: 'Runoob' },
            { text: 'Taobao' }
          ]
        }
      }
    }
    
    Vue.createApp(app).mount('#app')
    </script>
    • Google
    • --------------
    • Runoob
    • --------------
    • Taobao
    • --------------

    v-for 迭代对象

    v-for 可以通过一个对象的属性来迭代数据:

    v-for

    <div id="app">
      <ul>
        <li v-for="value in object">
        {{ value }}
        </li>
      </ul>
    </div>
     
    <script>
    const app = {
      data() {
        return {
          object: {
            name: '菜鸟教程',
            url: 'http://www.runoob.com',
            slogan: '学的不仅是技术,更是梦想!'
          }
        }
      }
    }
     
    Vue.createApp(app).mount('#app')
    </script>
    • 菜鸟教程
    • http://www.runoob.com
    • 学的不仅是技术,更是梦想!

    你也可以提供第二个的参数为键名:

    v-for

    <div id="app">
      <ul>
        <li v-for="(value, key) in object">
        {{ key }} : {{ value }}
        </li>
      </ul>
    </div>
     
    <script>
    const app = {
      data() {
        return {
          object: {
            name: '菜鸟教程',
            url: 'http://www.runoob.com',
            slogan: '学的不仅是技术,更是梦想!'
          }
        }
      }
    }
     
    Vue.createApp(app).mount('#app')
    </script>
    • name : 菜鸟教程
    • url : http://www.runoob.com
    • slogan : 学的不仅是技术,更是梦想!

    第三个参数为索引:

    v-for

    <div id="app">
      <ul>
        <li v-for="(value, key, index) in object">
         {{ index }}. {{ key }} : {{ value }}
        </li>
      </ul>
    </div>
     
    <script>
    const app = {
      data() {
        return {
          object: {
            name: '菜鸟教程',
            url: 'http://www.runoob.com',
            slogan: '学的不仅是技术,更是梦想!'
          }
        }
      }
    }
     
    Vue.createApp(app).mount('#app')
    </script>
    • 0. name : 菜鸟教程
    • 1. url : http://www.runoob.com
    • 2. slogan : 学的不仅是技术,更是梦想!

    v-for 迭代整数

    v-for 也可以循环整数

    v-for

    <div id="app">
      <ul>
        <li v-for="n in 10">
         {{ n }}
        </li>
      </ul>
    </div>
     
    <script>
        Vue.createApp(app).mount('#app')
    </script>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    显示过滤/排序后的结果

    我们可以对数组的元素进行处理后再显示出来,一般可以通过创建一个计算属性,来返回过滤或排序后的数组。

    v-for 实例

    输出数组中的偶数:

    <div id="app">
      <ul>
        <li v-for="n in evenNumbers">{{ n }}</li>
      </ul>
    </div>
     
    <script>
    const app = {
        data() {
            return {
                numbers: [ 1, 2, 3, 4, 5 ]
             }
        },
        computed: {
            evenNumbers() {
                return this.numbers.filter(number => number % 2 === 0)
            }
        }
    }
     
    Vue.createApp(app).mount('#app')
    </script>
    • 2
    • 4

    v-for/v-if 联合使用

    以上实例联合使用 v-for/v-if 给 select 设置默认值:

    v-for/v-if 实例

    v-for 循环出列表,v-if 设置选中值:

    <div id="app">
       <select @change="changeVal($event)" v-model="selOption">
          <template v-for="(site,index) in sites" :site="site" :index="index" :key="site.id">
             <!-- 索引为 1 的设为默认值,索引值从0 开始-->
             <option v-if = "index == 1" :value="site.name" selected>{{site.name}}</option>
             <option v-else :value="site.name">{{site.name}}</option>
          </template>
       </select>
       <div>您选中了:{{selOption}}</div>
    </div>
     
    <script>
    const app = {
        data() {
            return {
                selOption: "Runoob",
                sites: [
                      {id:1,name:"Google"},
                      {id:2,name:"Runoob"},
                      {id:3,name:"Taobao"},
                ]
             }
            
        },
        methods:{
            changeVal:function(event){
                this.selOption = event.target.value;
                alert("你选中了"+this.selOption);
            }
        }
    }
     
    Vue.createApp(app).mount('#app')
    </script>

    在组件上使用 v-for

    如果你还没了解组件的内容,可以先跳过这部分。

    在自定义组件上,你可以像在任何普通元素上一样使用 v-for:

    <my-component v-for="item in items" :key="item.id"></my-component>

    然而,任何数据都不会被自动传递到组件里,因为组件有自己独立的作用域。为了把迭代数据传递到组件里,我们要使用 props:

    <my-component
      v-for="(item, index) in items"
      :item="item"
      :index="index"
      :key="item.id"
    ></my-component>

    不自动将 item 注入到组件里的原因是,这会使得组件与 v-for 的运作紧密耦合。明确组件数据的来源能够使组件在其他场合重复使用。

    下面是一个简单的 todo 列表的完整例子:

    实例

    <div id="todo-list-example">
      <form v-on:submit.prevent="addNewTodo">
        <label for="new-todo">添加 todo</label>
        <input
          v-model="newTodoText"
          id="new-todo"
          placeholder="例如:明天早上跑步"
        />
        <button>添加</button>
      </form>
      <ul>
        <todo-item
          v-for="(todo, index) in todos"
          :key="todo.id"
          :title="todo.title"
          @remove="todos.splice(index, 1)"
        ></todo-item>
      </ul>
    </div>
     
    <script>
    const app = Vue.createApp({
      data() {
        return {
          newTodoText: '',
          todos: [
            {
              id: 1,
              title: '看电影'
            },
            {
              id: 2,
              title: '吃饭'
            },
            {
              id: 3,
              title: '上 RUNOOB 学习'
            }
          ],
          nextTodoId: 4
        }
      },
      methods: {
        addNewTodo() {
          this.todos.push({
            id: this.nextTodoId++,
            title: this.newTodoText
          })
          this.newTodoText = ''
        }
      }
    })
    
    app.component('todo-item', {
      template: `
        <li>
          {{ title }}
          <button @click="$emit('remove')">删除</button>
        </li>
      `,
      props: ['title'],
      emits: ['remove']
    })
    
    app.mount('#todo-list-example')
    </script>

  • 相关阅读:
    华为机试题01背包问题
    丑数
    动态规划(1)
    Linux 后台启动 Redis
    redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk.
    SQLServer从渣仔到小白
    cmder 增强型命令行工具
    总结在部署分布式爬虫环境过程中常见的若干问题
    【pymongo.errors】Cursor not found
    浅析scrapy与scrapy_redis区别
  • 原文地址:https://www.cnblogs.com/emanlee/p/16695349.html
Copyright © 2020-2023  润新知