Vue.js做select下拉列表的实例(ul-li标签仿select标签)

下面是详细讲解“Vue.js做select下拉列表的实例(ul-li标签仿select标签)”的完整攻略。

思路

在使用Vue.js做select下拉列表的时候,我们的思路是实现一个ul-li标签的下拉列表,通过Vue.js的指令动态地生成并管理列表,实现与原生select标签同样的效果。

实现步骤

1. 确定数据模型

在Vue.js中,我们需要为ul-li下拉列表确定一个数据模型。在这个数据模型中,我们需要包含以下信息:

  • 下拉列表的选项列表;
  • 当前选中的选项。
data: {
  selectList: [
    {value: '1', label: '选项1'},
    {value: '2', label: '选项2'},
    {value: '3', label: '选项3'},
    {value: '4', label: '选项4'},
  ],
  selectedValue: '1'
}

2. 渲染下拉列表

接下来,我们需要在页面中渲染这个下拉列表。我们可以通过v-for指令来循环渲染每个选项,并通过v-bind指令进行数据绑定。

<div class="select-container">
  <div class="select-header" v-on:click="showList = !showList">{{selectedLabel}}</div>
  <ul class="select-list" v-if="showList">
    <li v-for="(item,index) in selectList" v-on:click="setSelected(item.value)">
      {{item.label}}
    </li>
  </ul>
</div>

3. 实现选择下拉列表的功能

为了使得下拉列表具有选择选项的功能,我们需要在Vue.js中实现以下两个功能:

  • 显示选中的选项;
  • 点击选项后更新选中的选项。
computed: {
  selectedLabel: function() {
    return this.selectList.filter(item => item.value === this.selectedValue)[0].label
  }
},
methods: {
  setSelected: function(val) {
    this.selectedValue = val
    this.showList = false
  }
}

4. 添加样式

最后,我们需要为下拉列表添加一些CSS样式。

.select-container {
  position: relative;
  display: inline-block;
  width: 120px;
  height: 32px;
}

.select-header {
  position: relative;
  box-sizing: border-box;
  width: 100%;
  height: 100%;
  padding: 0 20px;
  line-height: 32px;
  border: 1px solid #ccc;
  border-radius: 4px;
  cursor: pointer;
}

.select-list {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 10;
  width: 100%;
  max-height: 128px;
  overflow-y: auto;
  margin: 0;
  padding: 0;
  border: 1px solid #ccc;
  border-top: none;
  border-radius: 0 0 4px 4px;
  list-style: none;
  background-color: #fff;
  box-shadow: 0 2px 4px rgba(0,0,0,.2);
}

.select-list li {
  box-sizing: border-box;
  width: 100%;
  height: 32px;
  padding: 0 20px;
  line-height: 32px;
  cursor: pointer;
  color: #333;
}

.select-list li:hover {
  background-color: #f0f0f0;
}

示例

下面是两个Vue.js做select下拉列表的实例,其中一个使用了静态数据,另一个使用了动态数据。

示例1: 静态数据

<div id="app">
  <div class="select-container">
    <div class="select-header" v-on:click="showList = !showList">{{selectedLabel}}</div>
    <ul class="select-list" v-if="showList">
      <li v-for="(item,index) in selectList" v-on:click="setSelected(item.value)">
        {{item.label}}
      </li>
    </ul>
  </div>
</div>

<script>
new Vue({
  el: '#app',
  data: {
    selectList: [
      {value: '1', label: '选项1'},
      {value: '2', label: '选项2'},
      {value: '3', label: '选项3'},
      {value: '4', label: '选项4'},
    ],
    selectedValue: '1',
    showList: false
  },
  computed: {
    selectedLabel: function() {
      return this.selectList.filter(item => item.value === this.selectedValue)[0].label
    }
  },
  methods: {
    setSelected: function(val) {
      this.selectedValue = val
      this.showList = false
    }
  }
})
</script>

<style>
.select-container {
  position: relative;
  display: inline-block;
  width: 120px;
  height: 32px;
}

.select-header {
  position: relative;
  box-sizing: border-box;
  width: 100%;
  height: 100%;
  padding: 0 20px;
  line-height: 32px;
  border: 1px solid #ccc;
  border-radius: 4px;
  cursor: pointer;
}

.select-list {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 10;
  width: 100%;
  max-height: 128px;
  overflow-y: auto;
  margin: 0;
  padding: 0;
  border: 1px solid #ccc;
  border-top: none;
  border-radius: 0 0 4px 4px;
  list-style: none;
  background-color: #fff;
  box-shadow: 0 2px 4px rgba(0,0,0,.2);
}

.select-list li {
  box-sizing: border-box;
  width: 100%;
  height: 32px;
  padding: 0 20px;
  line-height: 32px;
  cursor: pointer;
  color: #333;
}

.select-list li:hover {
  background-color: #f0f0f0;
}
</style>

示例2: 动态数据

<div id="app">
  <div class="select-container">
    <div class="select-header" v-on:click="showList = !showList">{{selectedLabel}}</div>
    <ul class="select-list" v-if="showList">
      <li v-for="(item,index) in selectList" v-on:click="setSelected(item.value)">
        {{item.label}}
      </li>
    </ul>
  </div>
  <button v-on:click="addOption">添加选项</button>
</div>

<script>
new Vue({
  el: '#app',
  data: {
    selectList: [
      {value: '1', label: '选项1'},
      {value: '2', label: '选项2'},
      {value: '3', label: '选项3'},
      {value: '4', label: '选项4'},
    ],
    selectedValue: '1',
    showList: false
  },
  computed: {
    selectedLabel: function() {
      return this.selectList.filter(item => item.value === this.selectedValue)[0].label
    }
  },
  methods: {
    setSelected: function(val) {
      this.selectedValue = val
      this.showList = false
    },
    addOption: function() {
      this.selectList.push({
        value: '5',
        label: '选项5'
      })
    }
  }
})
</script>

<style>
.select-container {
  position: relative;
  display: inline-block;
  width: 120px;
  height: 32px;
}

.select-header {
  position: relative;
  box-sizing: border-box;
  width: 100%;
  height: 100%;
  padding: 0 20px;
  line-height: 32px;
  border: 1px solid #ccc;
  border-radius: 4px;
  cursor: pointer;
}

.select-list {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 10;
  width: 100%;
  max-height: 128px;
  overflow-y: auto;
  margin: 0;
  padding: 0;
  border: 1px solid #ccc;
  border-top: none;
  border-radius: 0 0 4px 4px;
  list-style: none;
  background-color: #fff;
  box-shadow: 0 2px 4px rgba(0,0,0,.2);
}

.select-list li {
  box-sizing: border-box;
  width: 100%;
  height: 32px;
  padding: 0 20px;
  line-height: 32px;
  cursor: pointer;
  color: #333;
}

.select-list li:hover {
  background-color: #f0f0f0;
}
</style>

以上就是使用Vue.js做select下拉列表的实例(ul-li标签仿select标签)的完整攻略,希望可以对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue.js做select下拉列表的实例(ul-li标签仿select标签) - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 解析JavaScript中 querySelector 与 getElementById 方法的区别

    当在JavaScript中需要通过DOM方法来操作HTML文档元素时,会用到querySelector与getElementById两种方法。尽管这两种方法都可以工作,但是它们之间存在一些区别。 区别1:查找方式 使用querySelector方法可以使用CSS选择器来查找元素。例如,可以使用querySelector(“#example”)来查找id为ex…

    css 2023年6月9日
    00
  • 子元素div高度不确定时父div高度如何自适应

    在 CSS 中,当子元素 div 的高度不确定时,父元素 div 的高度无法自适应。这是由于父元素 div 的高度默认为 auto,无法自动适应子元素 div 的高度。下面是一个完整攻略,包含了如何让父元素 div 的高度自适应子元素 div 的高度的过程和两个示例说明。 让父元素 div 的高度自适应子元素 div 的高度 我们可以使用以下两种方法来让父元…

    css 2023年5月18日
    00
  • 借助得力工具五分钟快速制作CSS导航菜单

    下面是关于“借助得力工具五分钟快速制作CSS导航菜单”的完整攻略: 什么是得力工具? 得力工具是一款能够帮助用户快速制作CSS导航菜单的在线工具,无需编写CSS代码,只需要使用简单的拖拽操作,就能够创建出漂亮且实用的导航菜单。 如何使用得力工具制作CSS导航菜单? 以下是使用得力工具制作CSS导航菜单的详细步骤: 步骤一:打开得力工具网站 在浏览器中输入得力…

    css 2023年6月10日
    00
  • css实现兼容火狐、IE的LI奇偶行颜色交替方法

    CSS实现兼容火狐、IE的LI奇偶行颜色交替方法 为了实现网页中列表的行颜色交替,通常需要使用CSS中的:odd和:even伪类,但是在不同的浏览器下(比如firefox和IE)这两个伪类的实现方式有所不同,因此需要针对不同的浏览器进行特别处理,以下是实现方法: 方法一:使用CSS选择器 li:nth-child(odd) { background-colo…

    css 2023年6月9日
    00
  • Bootstrap3.0学习教程之JS折叠插件

    Bootstrap3.0学习教程之JS折叠插件是一个用于实现网页元素折叠效果的JavaScript插件,它基于Bootstrap框架,使用简单方便,可以帮助网站提高用户交互体验。下面就来详细讲解Bootstrap3.0学习教程之JS折叠插件的完整攻略。 下载安装 首先,你需要先下载Bootstrap框架和JS折叠插件。可以到Bootstrap官网进行下载,也…

    css 2023年6月10日
    00
  • jquery实现可自动判断位置的弹出层效果代码

    下面就来详细讲解如何使用jquery实现可自动判断位置的弹出层效果。 1. 准备工作 首先,在你的HTML文档中引入jQuery库,以便我们可以使用jQuery函数。 <!–引入 jQuery 库–> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jqu…

    css 2023年6月10日
    00
  • 基于JS实现仿京东搜索栏随滑动透明度渐变效果

    下面是基于JS实现仿京东搜索栏随滑动透明度渐变效果的攻略: 一、需求分析 需要实现的效果是在滑动页面时,搜索栏透明度随之改变,实现渐变效果。具体分为两个部分: 当页面滚动距离小于等于一定值时,搜索栏透明度为0; 当页面滚动距离大于一定值时,搜索栏透明度逐渐变化,最终渐变到1。 实现该效果需要用到JS动态改变样式的功能。 二、实现步骤 1. HTML部分 在H…

    css 2023年6月10日
    00
  • ES6使用export和import实现模块化的方法

    ES6使用export和import关键字实现模块化是JavaScript中常用的模块化方案之一。在本篇攻略中,我们将通过详细讲解来了解这一方案的具体实现过程。 一、ES6中简单模块化的实现 在ES6中实现模块化,我们需要用到export和import两个关键字。我们可以通过export关键字将模块中需要对外暴露的内容暴露出去,然后在其他的地方通过impor…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部