飞道的博客

【学vue跟玩一样】快速搞懂vue渲染

350人阅读  评论(0)

Vue的渲染分为条件渲染和列表渲染,那究竟什么式渲染呢?

1.条件渲染

1.v-if写法:(1)v-if="表达式"(2)v-else-if="表达式"(3)v-else="表达式"(和我们曾经学过的JavaScript里面的if语句几乎一样)

适用于:切换频率较低的场景。

特点:不展示的DOM元素直接被移除。

注意: v-if可以和:v-else-if、 v-else起使用, 但要求结构不能被“打断”。

只有当该条件返回值为真时才能进行渲染

<h1 v-if="Padme">小嘎鱼学Vue!</h1>

2.v-show写法: v-show=" 表达式”

适用于:切换频率较高的场景。

特点:不展示的DOM元素未被移除,仅仅是使用样式隐藏掉

  1. 注意:使用v-if的时,元素可能无法获取到,而使用v-show必定可以获取到。


   
  1. <body>
  2. <div class="user">
  3. <!-- 使用v-show做条件渲染 -->
  4. <!-- <h2 v-show = 'pand'>欢迎加入{{name}}社区</h2>
  5. <h2 v-show = '1 === 2'>欢迎加入{{name}}社区</h2> -->
  6. <!-- 使用v-if做条件渲染 -->
  7. <!-- <h2 v-if = 'null'>欢迎加入{{name}}社区</h2> -->
  8. <h1>当前值为{{n}} </h1>
  9. <button @click = 'n++'>点我n+1 </button>
  10. <div v-show = 'n ===1'>n为1我就出来 </div>
  11. <div v-show = 'n ===2'>n为2我就出来 </div>
  12. <div v-show = 'n ===3'>n为3我就出来 </div>
  13. <!-- v-if,v-else-if,v-else必须紧挨着 -->
  14. <div v-if = 'n ===4'>n为4我就出来 </div>
  15. <div v-else-if = 'n ===5'>n为5我就出来 </div>
  16. <div v-else>我就出来 </div>
  17. <!-- template模板标签只能使用v-if -->
  18. <template v-if = 'n === 1'>
  19. <h1>你好 </h1>
  20. <h1>你好好 </h1>
  21. <h1>你好好好 </h1>
  22. </template>
  23. </div>
  24. <script>
  25. const vm = new Vue({
  26. el: '.user',
  27. data:{
  28. name: 'Aic山鱼',
  29. pand: false,
  30. n: 0
  31. }
  32. })
  33. </script>
  34. </body>

2.列表渲染

v-for指令:

我们可以使用 v-for 指令基于一个数组来渲染一个列表。v-for 指令的值需要使用 item in items 形式的特殊语法,其中 items 是源数据的数组,而 item 是迭代项的别名:

1.用于展示列表数据

2.语法: v-for=" (item, index) in xx

3可遍历:数组、对象、字符串、指定次数(后两个用的比较少)


   
  1. <div id="user">
  2. <ul>
  3. <!-- v-for这里可以写俩参数接受值,key代表唯一表示 -->
  4. <!-- 遍历数组 -->
  5. <h2>学生信息 </h2>
  6. <li v-for='(p,index) in persons' :key="index">{{p.name}}-{{p.age}}岁----{{index}} </li>
  7. </ul>
  8. <ul>
  9. <!-- 遍历对象 -->
  10. <h2>汽车信息 </h2>
  11. <li v-for='(value,keys) in car'>{{value}}---{{keys}} </li>
  12. </ul>
  13. <ul>
  14. <!-- 遍历字符串 -->
  15. <h2>遍历字符串 </h2>
  16. <li v-for='(value,keys) in str'>{{value}}---{{keys}} </li>
  17. <!-- 遍历指定次数 -->
  18. <h2>遍历指定次数 </h2>
  19. <li v-for='(value,keys) of 5'>{{value}}---{{keys}} </li>
  20. </ul>
  21. </div>
  22. <script>
  23. const vm = new Vue({
  24. el: '#user',
  25. data: {
  26. persons: [
  27. { id: 001, name: '山鱼', age: 18 },
  28. { id: 002, name: '龙猫', age: 19 },
  29. { id: 003, name: '飞飞', age: 20 }
  30. ],
  31. car: {
  32. name: '宝马',
  33. numbers: '25W',
  34. type: 'sr1000rr'
  35. },
  36. str: 'I-LOVE-YOU'
  37. }
  38. })
  39. </script>

2.1v-for与对象

1.可以使用 v-for 来遍历一个对象的所有属性,遍历的顺序会基于对该对象调用 Object.keys() 的返回值来决定。


   
  1. <ul>
  2. <li v-for="value in myObject">
  3. {{ value }}
  4. </li>
  5. </ul>

   
  1. data( ) {
  2. return {
  3. myObject: {
  4. title: 'How to do lists in Vue',
  5. author: 'Jane Doe',
  6. publishedAt: '2016-04-10'
  7. }
  8. }
  9. }

2.可以通过提供第二个参数表示属性名 (例如 key):


   
  1. <li v- for= "(value, key) in myObject">
  2. {{ key }}: {{ value }}
  3. </li>
  1. 第三个参数表示位置索引


   
  1. <li v-for="(value, key, index) in myObject">
  2. {{ index }}. {{ key }}: {{ value }}
  3. </li>

3.key的作用

3.1列表过滤

这里可以使用侦听器实现也可以使用计算属性实现,但是一般都是使用计算属性更简单一些


   
  1. <body>
  2. <div id="user">
  3. <h1>人员列表 </h1>
  4. <input type="text" name="" id="" placeholder="输入搜索" v-model='keyWord'>
  5. <ul>
  6. <li v-for='p of filpersons' :key='p.id'>{{p.name}}-{{p.age}}-{{p.sex}} </li>
  7. </ul>
  8. </div>
  9. <script>
  10. const vm = new Vue({
  11. el: '#user',
  12. data: {
  13. // 1.收集用户的输入2.
  14. keyWord: '',
  15. persons: [
  16. { id: '001', name: '马冬梅', age: 18, sex: '女' },
  17. { id: '002', name: '周冬雨', age: 19, sex: '女' },
  18. { id: '003', name: '周杰伦', age: 20, sex: '男' },
  19. { id: '004', name: '温兆伦', age: 20, sex: '男' },
  20. ]
  21. },
  22. computed: {
  23. filpersons( ) {
  24. return this. persons. filter( (p) => {
  25. return p. name. indexOf( this. keyWord) !== - 1;
  26. })
  27. }
  28. }
  29. })
  30. </script>

3.2列表排序

列表排序是从列表过滤基础上添加的


   
  1. <body>
  2. <div id="user">
  3. <h1>人员列表 </h1>
  4. <button @click='sortType = 1'>升序 </button>
  5. <button @click='sortType = 2'>降序 </button>
  6. <button @click='sortType = 0'>原序 </button>
  7. <input type="text" name="" id="" placeholder="输入搜索" v-model='keyWord'>
  8. <ul>
  9. <li v-for='p of filpersons' :key='p.id'>{{p.name}}-{{p.age}}-{{p.sex}} </li>
  10. </ul>
  11. </div>
  12. <script>
  13. // 使用计算属性实现列表过滤
  14. const vm = new Vue({
  15. el: '#user',
  16. data: {
  17. // 1.收集用户的输入2.
  18. keyWord: '',
  19. sortType: 0, // 0代表原顺序,1代表升序,2代表降序
  20. persons: [
  21. { id: '001', name: '马冬梅', age: 18, sex: '女' },
  22. { id: '002', name: '周冬雨', age: 19, sex: '女' },
  23. { id: '003', name: '周杰伦', age: 20, sex: '男' },
  24. { id: '004', name: '温兆伦', age: 20, sex: '男' },
  25. ]
  26. },
  27. computed: {
  28. filpersons( ) {
  29. const arr = this. persons. filter( (p) => {
  30. return p. name. indexOf( this. keyWord) !== - 1;
  31. })
  32. if ( this. sortType) {
  33. arr. sort( (p1, p2) => {
  34. return this. sortType === 1 ? p2. age - p1. age : p1. age - p2. age
  35. })
  36. }
  37. return arr;
  38. }
  39. }
  40. })
  41. var arr = [ 1, 2, 3, 4];
  42. arr. sort( (p1, p2) => {
  43. return this. sortType === 1 ? p2 - p1 : p1 - p2
  44. })
  45. </script>
  46. </body>

3.3vue.set的使用

vue.set的三个参数分别是(给谁添加,添加什么,添加的值是啥)

使用$set也可以实现该功能

局限性:在这里set方法只能给Vue实例对象里面的data内的对象添加属性,不可以直接给data添加属性

3.4数组检测

Vue将被侦听的数组的变更方法进行了包裹,所以它们也将会触发视图更新。这些被包裹过的方法

包括:

  • push()

  • pop()

  • shift()

  • unshift()

  • splice()

  • sort()

  • reverse()

点赞:您的赞赏是我前进的动力! 👍
收藏:您的支持我是创作的源泉!
评论:您的建议是我改进的良药!
山鱼的个人社区:欢迎大家加入我的个人社区—— 山鱼社区 如果对你有帮助的话希望三连下


转载:https://blog.csdn.net/zhaochen1127/article/details/128572932
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场