• 选项卡案例


     

    1、 HTML 结构

    `
       <div id="app">
           <div class="tab">
               <!-- tab栏 -->
               <ul>
                   <li class="active">apple</li>
                   <li class="">orange</li>
                   <li class="">lemon</li>
               </ul>
                 <!-- 对应显示的图片 -->
               <div class="current"><img src="img/apple.png"></div>
               <div class=""><img src="img/orange.png"></div>
               <div class=""><img src="img/lemon.png"></div>
           </div>
       </div>


    `

    2、 提供的数据

             list: [{
                       id: 1,
                       title: 'apple',
                       path: 'img/apple.png'
                  }, {
                       id: 2,
                       title: 'orange',
                       path: 'img/orange.png'
                  }, {
                       id: 3,
                       title: 'lemon',
                       path: 'img/lemon.png'
                  }]

     

    3、 把数据渲染到页面

    • 把tab栏 中的数替换到页面上

      • 把 data 中 title 利用 v-for 循环渲染到页面上

      • 把 data 中 path利用 v-for 循环渲染到页面上

          <div id="app">
             <div class="tab">  
                 <ul>
                       <!--  
                         1、绑定key的作用 提高Vue的性能
                         2、 key 需要是唯一的标识 所以需要使用id, 也可以使用index ,
      index 也是唯一的
                         3、 item 是 数组中对应的每一项  
                         4、 index 是 每一项的 索引
                     -->
                        <li :key='item.id' v-for='(item,index) in list'>{{item.title}}</li>
                   </ul>
                   <div  :key='item.id' v-for='(item, index) in list'>
                         <!-- : 是 v-bind 的简写   绑定属性使用 v-bind -->
                         <img :src="item.path">
                   </div>
             </div>
         </div>
      <script>
         new  Vue({
             // 指定 操作元素 是 id 为app 的
             el: '#app',
                 data: {
                     list: [{
                         id: 1,
                         title: 'apple',
                         path: 'img/apple.png'
                    }, {
                         id: 2,
                         title: 'orange',
                         path: 'img/orange.png'
                    }, {
                         id: 3,
                         title: 'lemon',
                         path: 'img/lemon.png'
                    }]
                }
        })

      </script>

       

    4、 给每一个tab栏添加事件,并让选中的高亮

    • 4.1 、让默认的第一项tab栏高亮

      • tab栏高亮 通过添加类名active 来实现 (CSS active 的样式已经提前写好)

        • 在data 中定义一个 默认的 索引 currentIndex 为 0

        • 给第一个li 添加 active 的类名

          • 通过动态绑定class 来实现 第一个li 的索引为 0 和 currentIndex 的值刚好相等

          • currentIndex === index 如果相等 则添加类名 active 否则 添加 空类名

    • 4.2 、让默认的第一项tab栏对应的div 显示

      • 实现思路 和 第一个 tab 实现思路一样 只不过 这里控制第一个div 显示的类名是 current

        <ul>
        <!-- 动态绑定class   有 active   类名高亮 无 active   不高亮-->
            <li  :class='currentIndex==index?"active":""'
                :key='item.id' v-for='(item,index) in list'
                >{{item.title}}</li>
       </ul>
      <!-- 动态绑定class   有 current 类名显示 无 current 隐藏-->
       <div :class='currentIndex==index?"current":""'
           
            :key='item.id' v-for='(item, index) in list'>
             <!-- : 是 v-bind 的简写   绑定属性使用 v-bind -->
             <img :src="item.path">
       </div>

      <script>
         new  Vue({
             el: '#app',
                 data: {
                     currentIndex: 0, // 选项卡当前的索引 默认为 0  
                     list: [{
                         id: 1,
                         title: 'apple',
                         path: 'img/apple.png'
                    }, {
                         id: 2,
                         title: 'orange',
                         path: 'img/orange.png'
                    }, {
                         id: 3,
                         title: 'lemon',
                         path: 'img/lemon.png'
                    }]
                }
        })

      </script>
    • 4.3 、点击每一个tab栏 当前的高亮 其他的取消高亮

      • 给每一个li添加点击事件

      • 让当前的索引 index 和 当前 currentIndex 的 值 进项比较

      • 如果相等 则当前li 添加active 类名 当前的 li 高亮 当前对应索引的 div 添加 current 当前div 显示 其他隐藏

            <div id="app">
               <div class="tab">
                   <ul>
                       <!-- 通过v-on 添加点击事件   需要把当前li 的索引传过去
        -->
                       <li v-on:click='change(index)'          
                           :class='currentIndex==index?"active":""'                  
                           :key='item.id'
                           v-for='(item,index) in list'>{{item.title}}</li>
                   </ul>
                   <div :class='currentIndex==index?"current":""'
                        :key='item.id' v-for='(item, index) in list'>
                       <img :src="item.path">
                   </div>
               </div>
           </div>

        <script>
           new  Vue({
               el: '#app',
                   data: {
                       currentIndex: 0, // 选项卡当前的索引 默认为 0  
                       list: [{
                           id: 1,
                           title: 'apple',
                           path: 'img/apple.png'
                      }, {
                           id: 2,
                           title: 'orange',
                           path: 'img/orange.png'
                      }, {
                           id: 3,
                           title: 'lemon',
                           path: 'img/lemon.png'
                      }]
                  },
                   methods: {
                       change: function(index) {
                           // 通过传入过来的索引来让当前的 currentIndex 和点击的index 值 相等
                           // 从而实现 控制类名    
                           this.currentIndex = index;
                      }
                  }
           
          })

        </script>
      •  

  • 相关阅读:
    java中有趣的unicode转义序列
    react父组件传入子组件的props不更新问题
    create-react-app修改端口号
    转移博客启动中。。。
    idea java界面设置中文
    记录一次 electronjs 12.0.0 安装运行出现cli.js出错、以及获取不到nodeapi的问题(解决办法:版本不对导致的)
    springboot 统一json返回格式,并设置http响应码
    springboot 统一json返回结构
    【Python】【PyPI】twine模块打包python项目上传pypi
    【GitHub】README.md自述文件配置
  • 原文地址:https://www.cnblogs.com/xc-dh/p/14045098.html
Copyright © 2020-2023  润新知