当选项过多时,使用下拉菜单展示并选择内容。
v-model的值为当前被选中的el-option的 value 属性值
- <el-select v-model="value" placeholder="请选择">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- el-option>
- el-select>
-
- <script>
- export default {
- data() {
- return {
- options: [{
- value: '选项1',
- label: '黄金糕'
- }, {
- value: '选项2',
- label: '双皮奶'
- }, {
- value: '选项3',
- label: '蚵仔煎'
- }, {
- value: '选项4',
- label: '龙须面'
- }, {
- value: '选项5',
- label: '北京烤鸭'
- }],
- value: ''
- }
- }
- }
- script>
在el-option中,设定disabled值为 true,即可禁用该选项
- <el-select v-model="value" placeholder="请选择">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- :disabled="item.disabled">
- el-option>
- el-select>
-
- <script>
- export default {
- data() {
- return {
- options: [{
- value: '选项1',
- label: '黄金糕'
- }, {
- value: '选项2',
- label: '双皮奶',
- disabled: true
- }, {
- value: '选项3',
- label: '蚵仔煎'
- }, {
- value: '选项4',
- label: '龙须面'
- }, {
- value: '选项5',
- label: '北京烤鸭'
- }],
- value: ''
- }
- }
- }
- script>
选择器不可用状态
为el-select设置disabled属性,则整个选择器不可用
- <el-select v-model="value" disabled placeholder="请选择">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- el-option>
- el-select>
-
- <script>
- export default {
- data() {
- return {
- options: [{
- value: '选项1',
- label: '黄金糕'
- }, {
- value: '选项2',
- label: '双皮奶'
- }, ],
- value: ''
- }
- }
- }
- script>
包含清空按钮,可将选择器清空为初始状态
为el-select设置clearable属性,则可将选择器清空。需要注意的是,clearable属性仅适用于单选。
- <el-select v-model="value" clearable placeholder="请选择">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- el-option>
- el-select>
-
- <script>
- export default {
- data() {
- return {
- options: [{
- value: '选项1',
- label: '黄金糕'
- }, {
- value: '选项2',
- label: '双皮奶'
- }, {
- value: '选项3',
- label: '蚵仔煎'
- }, {
- value: '选项4',
- label: '龙须面'
- }, {
- value: '选项5',
- label: '北京烤鸭'
- }],
- value: ''
- }
- }
- }
- script>
适用性较广的基础多选,用 Tag 展示已选项
为el-select设置multiple属性即可启用多选,此时v-model的值为当前选中值所组成的数组。默认情况下选中值会以 Tag 的形式展现,你也可以设置collapse-tags属性将它们合并为一段文字。
- <el-select v-model="value1" multiple placeholder="请选择">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- el-option>
- el-select>
-
- <el-select
- v-model="value2"
- multiple
- collapse-tags
- style="margin-left: 20px;"
- placeholder="请选择">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- el-option>
- el-select>
-
- <script>
- export default {
- data() {
- return {
- options: [{
- value: '选项1',
- label: '黄金糕'
- }, {
- value: '选项2',
- label: '双皮奶'
- }, {
- value: '选项3',
- label: '蚵仔煎'
- }, {
- value: '选项4',
- label: '龙须面'
- }, {
- value: '选项5',
- label: '北京烤鸭'
- }],
- value1: [],
- value2: []
- }
- }
- }
- script>
可以自定义备选项
将自定义的 HTML 模板插入el-option的 slot 中即可。
- <el-select v-model="value" placeholder="请选择">
- <el-option
- v-for="item in cities"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- <span style="float: left">{{ item.label }}span>
- <span style="float: right; color: #8492a6; font-size: 13px">{{ item.value }}span>
- el-option>
- el-select>
-
- <script>
- export default {
- data() {
- return {
- cities: [{
- value: 'Beijing',
- label: '北京'
- }, {
- value: 'Shanghai',
- label: '上海'
- }, {
- value: 'Nanjing',
- label: '南京'
- }, {
- value: 'Chengdu',
- label: '成都'
- }, {
- value: 'Shenzhen',
- label: '深圳'
- }, {
- value: 'Guangzhou',
- label: '广州'
- }],
- value: ''
- }
- }
- }
- script>
备选项进行分组展示
使用el-option-group对备选项进行分组,它的label属性为分组名
- <el-select v-model="value" placeholder="请选择">
- <el-option-group
- v-for="group in options"
- :key="group.label"
- :label="group.label">
- <el-option
- v-for="item in group.options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- el-option>
- el-option-group>
- el-select>
-
- <script>
- export default {
- data() {
- return {
- options: [{
- label: '热门城市',
- options: [{
- value: 'Shanghai',
- label: '上海'
- }, {
- value: 'Beijing',
- label: '北京'
- }]
- }, {
- label: '城市名',
- options: [{
- value: 'Chengdu',
- label: '成都'
- }, {
- value: 'Shenzhen',
- label: '深圳'
- }, {
- value: 'Guangzhou',
- label: '广州'
- }, {
- value: 'Dalian',
- label: '大连'
- }]
- }],
- value: ''
- }
- }
- }
- script>
可以利用搜索功能快速查找选项
为
el-select添加filterable属性即可启用搜索功能。默认情况下,Select 会找出所有label属性包含输入值的选项。如果希望使用其他的搜索逻辑,可以通过传入一个filter-method来实现。filter-method为一个Function,它会在输入值发生变化时调用,参数为当前输入值。
- <el-select v-model="value" filterable placeholder="请选择">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- el-option>
- el-select>
-
- <script>
- export default {
- data() {
- return {
- options: [{
- value: '选项1',
- label: '黄金糕'
- }, {
- value: '选项2',
- label: '双皮奶'
- }, {
- value: '选项3',
- label: '蚵仔煎'
- }, {
- value: '选项4',
- label: '龙须面'
- }, {
- value: '选项5',
- label: '北京烤鸭'
- }],
- value: ''
- }
- }
- }
- script>
从服务器搜索数据,输入关键字进行查找
为了启用远程搜索,需要将
filterable和remote设置为true,同时传入一个remote-method。remote-method为一个Function,它会在输入值发生变化时调用,参数为当前输入值。需要注意的是,如果el-option是通过v-for指令渲染出来的,此时需要为el-option添加key属性,且其值需具有唯一性,比如此例中的item.value。
- <el-select
- v-model="value"
- multiple
- filterable
- remote
- reserve-keyword
- placeholder="请输入关键词"
- :remote-method="remoteMethod"
- :loading="loading">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- el-option>
- el-select>
-
- <script>
- export default {
- data() {
- return {
- options: [],
- value: [],
- list: [],
- loading: false,
- states: ["Alabama", "Alaska", "Arizona",
- "Arkansas", "California", "Colorado",
- "Connecticut", "Delaware", "Florida",
- "Georgia", ]
- }
- },
- mounted() {
- this.list = this.states.map(item => {
- return { value: `value:${item}`, label: `label:${item}` };
- });
- },
- methods: {
- remoteMethod(query) {
- if (query !== '') {
- this.loading = true;
- setTimeout(() => {
- this.loading = false;
- this.options = this.list.filter(item => {
- return item.label.toLowerCase()
- .indexOf(query.toLowerCase()) > -1;
- });
- }, 200);
- } else {
- this.options = [];
- }
- }
- }
- }
- script>
可以创建并选中选项中不存在的条目
使用
allow-create属性即可通过在输入框中输入文字来创建新的条目。注意此时filterable必须为真。本例还使用了default-first-option属性,在该属性打开的情况下,按下回车就可以选中当前选项列表中的第一个选项,无需使用鼠标或键盘方向键进行定位。
- <el-select
- v-model="value"
- multiple
- filterable
- allow-create
- default-first-option
- placeholder="请选择文章标签">
- <el-option
- v-for="item in options"
- :key="item.value"
- :label="item.label"
- :value="item.value">
- el-option>
- el-select>
-
- <script>
- export default {
- data() {
- return {
- options: [{
- value: 'HTML',
- label: 'HTML'
- }, {
- value: 'CSS',
- label: 'CSS'
- }, {
- value: 'JavaScript',
- label: 'JavaScript'
- }],
- value: []
- }
- }
- }
- script>
如果 Select 的绑定值为对象类型,请务必指定
value-key作为它的唯一性标识。