naive-ui/demo/documentation/components/select/zhCN/customOption.md

172 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 自定义选项渲染
经过了很久的思考,我决定放弃支持 Slot API。当然还是提供自定义渲染选项的方式。
```html
<n-select
v-model="value"
:options="options"
/>
```
```js
import mdMusicalNote from 'naive-ui/lib/icons/md-musical-note'
function render (h, option, selected) {
return [
h('n-config-consumer', {
props: {
abstract: true
},
scopedSlots: {
default ({ styleScheme }) {
return h('n-icon', {
style: {
fill: selected ? styleScheme.primaryColor : styleScheme.tertiaryTextColor,
verticalAlign: 'middle',
marginRight: '4px',
}
}, [h(mdMusicalNote)])
}
}
}),
option.label
]
}
export default {
data () {
return {
value: null,
options: [
{
type: 'group',
name: 'Rubber Soul',
render: (h, data) => h('span', [ data.name, '(Cool!)']),
children: [
{
label: 'Everybody\'s Got Something to Hide Except Me and My Monkey',
value: 'song0',
disabled: true
},
{
label: 'Drive My Car',
value: 'song1'
},
{
label: 'Norwegian Wood',
value: 'song2'
},
{
label: 'You Won\'t See',
value: 'song3',
disabled: true
},
{
label: 'Nowhere Man',
value: 'song4'
},
{
label: 'Think For Yourself',
value: 'song5'
},
{
label: 'The Word',
value: 'song6'
},
{
label: 'Michelle',
value: 'song7',
disabled: true
},
{
label: 'What goes on',
value: 'song8'
},
{
label: 'Girl',
value: 'song9'
},
{
label: 'I\'m looking through you',
value: 'song10'
},
{
label: 'In My Life',
value: 'song11'
},
{
label: 'Wait',
value: 'song12'
}
].map(v => {
v.render = render
return v
})
},
{
type: 'group',
name: 'Let It Be',
render: (h, data) => h('span', [ data.name, '(Cool!)']),
children: [
{
label: 'Two Of Us',
value: 'Two Of Us'
},
{
label: 'Dig A Pony',
value: 'Dig A Pony'
},
{
label: 'Across The Universe',
value: 'Across The Universe'
},
{
label: 'I Me Mine',
value: 'I Me Mine'
},
{
label: 'Dig It',
value: 'Dig It'
},
{
label: 'Let It Be',
value: 'Let It Be'
},
{
label: 'Maggie Mae',
value: 'Maggie Mae'
},
{
label: 'I\'ve Got A Feeling',
value: 'I\'ve Got A Feeling'
},
{
label: 'One After 909',
value: 'One After 909'
},
{
label: 'The Long And Winding Road',
value: 'The Long And Winding Road'
},
{
label: 'For You Blue',
value: 'For You Blue'
},
{
label: 'Get Back',
value: 'Get Back'
}
].map(v => {
v.render = render
return v
})
}
]
}
}
}
```
```css
.n-select {
width: 180px;
margin: 0 12px 8px 0;
}
```