当前位置:   article > 正文

【Vue3】2-8 : 条件渲染与列表渲染及注意点_vue3.2 多条件渲染

vue3.2 多条件渲染

本书目录:点击进入

一、条件渲染 - v-if = 表达式

1.1 真值与假值

1.2  v-if ,v-else-if ,v-else

1.3  实战:isShow1 为真值时 显示 bbbbb

>  代码

>  效果

二、列表渲染 - v-for

2.1 渲染 - 数组

>  代码

>  效果

2.2 渲染 - 对象

>  代码

>  效果

2.3 渲染 - 整数

 >  代码

>  效果

2.3 渲染 - 文本(字符串)

 >  代码

>  效果

三、v-if 和 v-for 注意点

3.1 列表渲染需要添加key属性

作用: 为了防止渲染错位

 >  代码

>  效果

3.2 v-if 和 v-for 尽量不要一起使用

作用: 防止v-if 无法读取元素值

 >  代码:保留id能被2整除的项

>  效果

3.3 template标签起到的作用 

作用: 编组,替代无用div

 >  代码

>  效果


一、条件渲染 - v-if = 表达式

  • 表达式 = truthy真值 时 渲染一块内容

1.1 真值与假值

  • falsy 假值 :(即 false、0、-0、0n、""、null、undefined 和 NaN

  • truthy真值非假值均为真值

1.2  v-if ,v-else-if ,v-else

  • 三者可以搭配使用

  • 中间不能插入其它代码,否则会报错

1.3  实战:isShow1 为真值时 显示 bbbbb

>  代码

  1. <body>
  2. <div id="app">
  3. <div v-if="isShow">aaaaa</div>
  4. <div v-else-if="isShow1">bbbbb</div>
  5. <div v-else>ccccc</div>
  6. </div>
  7. <script>
  8. let vm = Vue.createApp({
  9. data(){
  10. return {
  11. isShow: 0,
  12. isShow1: 2,
  13. }
  14. }
  15. }).mount('#app');
  16. </script>
  17. </body>

>  效果

二、列表渲染 - v-for

  • 数组渲染列表

  • item in items 形式

  • items:源数组

  • item :数组元素的别名

2.1 渲染 - 数组

>  代码

  1. <body>
  2. <div id="app">
  3. <div v-for="item, index in list">{{ item }}, {{ index }}</div>
  4. <div v-for="item in list">{{ item }}</div>
  5. </div>
  6. <script>
  7. let vm = Vue.createApp({
  8. data(){
  9. return {
  10. list: ['a', 'b', 'c']
  11. }
  12. }
  13. }).mount('#app');
  14. setTimeout(()=>{
  15. //vm.list.push('d');
  16. vm.list[1] = 'd';
  17. }, 2000)
  18. </script>
  19. </body>

>  效果

2.2 渲染 - 对象

>  代码

  1. <body>
  2. <div id="app">
  3. <div v-for="value in info">{{ value }}</div>
  4. <div v-for="value, key in info">{{ value }}, {{ key }}</div>
  5. <div v-for="value, key, index in info">{{ value }}, {{ key }}, {{ index }}</div>
  6. </div>
  7. <script>
  8. let vm = Vue.createApp({
  9. data(){
  10. return {
  11. info: { username: 'xiaoming', age: 20 }
  12. }
  13. }
  14. }).mount('#app');
  15. </script>
  16. </body>

>  效果

2.3 渲染 - 整数

 >  代码

  1. <body>
  2. <div id="app">
  3. <div v-for="item in num">{{ item }}</div>
  4. </div>
  5. <script>
  6. let vm = Vue.createApp({
  7. data(){
  8. return {
  9. num: 10
  10. }
  11. }
  12. }).mount('#app');
  13. </script>
  14. </body>

>  效果

2.3 渲染 - 文本(字符串)

 >  代码

  1. <body>
  2. <div id="app">
  3. <div v-for="item in text">{{ item }}</div>
  4. </div>
  5. <script>
  6. let vm = Vue.createApp({
  7. data(){
  8. return {
  9. text: 'hello'
  10. }
  11. }
  12. }).mount('#app');
  13. </script>
  14. </body>

>  效果

三、v-if 和 v-for 注意点

3.1 列表渲染需要添加key属性

作用: 为了防止渲染错位

 >  代码 :key="item.id"

  1. <body>
  2. <div id="app">
  3. <div v-for="item, index in list" :key="item.id">{{ item.text }}, {{ index }}, <input type="text"></div>
  4. </div>
  5. <script>
  6. let vm = Vue.createApp({
  7. data(){
  8. return {
  9. list: [
  10. { id: 1, text: 'a' },
  11. { id: 2, text: 'b' },
  12. { id: 3, text: 'c' },
  13. ]
  14. }
  15. }
  16. }).mount('#app');
  17. setTimeout(()=>{
  18. vm.list.unshift({ id: 4, text: 'd' });
  19. }, 3000)
  20. </script>
  21. </body>

>  效果

3.2 v-if 和 v-for 尽量不要一起使用

作用: 防止v-if 无法读取元素值

 >  代码:保留id能被2整除的项

  1. <body>
  2. <div id="app">
  3. <div v-for="item, index in oddList" :key="index">{{ item.text }}, {{ index }}, <input type="text"></div>
  4. </div>
  5. <script>
  6. let vm = Vue.createApp({
  7. data(){
  8. return {
  9. list: [
  10. { id: 1, text: 'a' },
  11. { id: 2, text: 'b' },
  12. { id: 3, text: 'c' },
  13. ]
  14. }
  15. },
  16. computed: {
  17. oddList(){
  18. return this.list.filter((v)=> v.id%2 === 0);
  19. }
  20. }
  21. }).mount('#app');
  22. setTimeout(()=>{
  23. vm.list.unshift({ id: 4, text: 'd' });//向集合的头部添加元素
  24. }, 3000)
  25. </script>
  26. </body>

>  效果

3.3 template标签起到的作用 

作用: 编组,替代无用div

 >  代码

  1. <body>
  2. <div id="app">
  3. <template v-if="isShow">
  4. <div>aaaa</div>
  5. <div>bbbb</div>
  6. </template>
  7. </div>
  8. <script>
  9. let vm = Vue.createApp({
  10. data(){
  11. return {
  12. isShow: true
  13. }
  14. }
  15. }).mount('#app');
  16. </script>
  17. </body>

>  效果

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/998135
推荐阅读
相关标签
  

闽ICP备14008679号