¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <view |
| | | class="u-radio-group" |
| | | :class="bemClass" |
| | | > |
| | | <slot></slot> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | import props from './props.js'; |
| | | |
| | | /** |
| | | * radioRroup åéæ¡ç¶ç»ä»¶ |
| | | * @description åéæ¡ç¨äºæä¸ä¸ªéæ©ï¼ç¨æ·åªè½éæ©å
¶ä¸ä¸ä¸ªçåºæ¯ãæé
u-radioä½¿ç¨ |
| | | * @tutorial https://www.uviewui.com/components/radio.html |
| | | * @property {String | Number | Boolean} value ç»å®çå¼ |
| | | * @property {Boolean} disabled æ¯å¦ç¦ç¨ææradioï¼é»è®¤ false ï¼ |
| | | * @property {String} shape å¤è§å½¢ç¶ï¼shape-æ¹å½¢ï¼circle-åå½¢(é»è®¤ circle ) |
| | | * @property {String} activeColor é䏿¶çé¢è²ï¼åºç¨å°ææåRadioç»ä»¶ï¼é»è®¤ '#2979ff' ï¼ |
| | | * @property {String} inactiveColor æªéä¸çé¢è² (é»è®¤ '#c8c9cc' ) |
| | | * @property {String} name æ è¯ç¬¦ |
| | | * @property {String | Number} size ç»ä»¶æ´ä½ç大å°ï¼åä½pxï¼é»è®¤ 18 ï¼ |
| | | * @property {String} placement å¸å±æ¹å¼ï¼row-横åï¼column-纵å ï¼é»è®¤ 'row' ï¼ |
| | | * @property {String} label ææ¬ |
| | | * @property {String} labelColor labelçé¢è² ï¼é»è®¤ '#303133' ï¼ |
| | | * @property {String | Number} labelSize labelçåä½å¤§å°ï¼pxåä½ ï¼é»è®¤ 14 ï¼ |
| | | * @property {Boolean} labelDisabled æ¯å¦ç¦æ¢ç¹å»ææ¬æä½checkbox(é»è®¤ false ) |
| | | * @property {String} iconColor 徿 é¢è² ï¼é»è®¤ '#ffffff' ï¼ |
| | | * @property {String | Number} iconSize 徿 ç大å°ï¼åä½px ï¼é»è®¤ 12 ï¼ |
| | | * @property {Boolean} borderBottom placement为rowæ¶ï¼æ¯å¦æ¾ç¤ºä¸è¾¹æ¡ ï¼é»è®¤ false ï¼ |
| | | * @property {String} iconPlacement 徿 䏿åç坹齿¹å¼ ï¼é»è®¤ 'left' ï¼ |
| | | * @property {Object} customStyle ç»ä»¶çæ ·å¼ï¼å¯¹è±¡å½¢å¼ |
| | | * @event {Function} change ä»»ä¸ä¸ªradioç¶æåçååæ¶è§¦å |
| | | * @example <u-radio-group v-model="value"></u-radio-group> |
| | | */ |
| | | export default { |
| | | name: 'u-radio-group', |
| | | mixins: [uni.$u.mpMixin, uni.$u.mixin,props], |
| | | computed: { |
| | | // è¿écomputedçåéï¼é½æ¯åç»ä»¶u-radioéè¦ç¨å°çï¼ç±äºå¤´æ¡å°ç¨åºçå
¼å®¹æ§å·®å¼ï¼åç»ä»¶æ æ³å®æ¶çå¬ç¶ç»ä»¶åæ°çåå |
| | | // æä»¥éè¦æå¨éç¥åç»ä»¶ï¼è¿éè¿åä¸ä¸ªparentDataåéï¼ä¾watchçå¬ï¼å¨å
¶ä¸å»éç¥æ¯ä¸ä¸ªåç»ä»¶éæ°ä»ç¶ç»ä»¶(u-radio-group) |
| | | // æåç¶ç»ä»¶æ°çåååçåæ° |
| | | parentData() { |
| | | return [this.value, this.disabled, this.inactiveColor, this.activeColor, this.size, this.labelDisabled, this.shape, |
| | | this.iconSize, this.borderBottom, this.placement |
| | | ] |
| | | }, |
| | | bemClass() { |
| | | // this.bem为ä¸ä¸ªcomputedåéï¼å¨mixinä¸ |
| | | return this.bem('radio-group', ['placement']) |
| | | }, |
| | | }, |
| | | watch: { |
| | | // å½ç¶ç»ä»¶éè¦åç»ä»¶éè¦å
±äº«çåæ°åçäºååï¼æå¨éç¥åç»ä»¶ |
| | | parentData() { |
| | | if (this.children.length) { |
| | | this.children.map(child => { |
| | | // 夿åç»ä»¶(u-radio)妿æinitæ¹æ³çè¯ï¼å°±å°±æ§è¡(æ§è¡çç»ææ¯åç»ä»¶éæ°ä»ç¶ç»ä»¶æåäºææ°çå¼) |
| | | typeof(child.init) === 'function' && child.init() |
| | | }) |
| | | } |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | | |
| | | } |
| | | }, |
| | | created() { |
| | | this.children = [] |
| | | }, |
| | | methods: { |
| | | // å°å
¶ä»çradio设置为æªéä¸çç¶æ |
| | | unCheckedOther(childInstance) { |
| | | this.children.map(child => { |
| | | // ææåradioä¸ï¼è¢«æä½ç»ä»¶å®ä¾çcheckedç弿 éä¿®æ¹ |
| | | if (childInstance !== child) { |
| | | child.checked = false |
| | | } |
| | | }) |
| | | const { |
| | | name |
| | | } = childInstance |
| | | // éè¿emitäºä»¶ï¼è®¾ç½®ç¶ç»ä»¶éè¿v-modelååç»å®çå¼ |
| | | this.$emit('input', name) |
| | | // ååºäºä»¶ |
| | | this.$emit('change', name) |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | @import "../../libs/css/components.scss"; |
| | | |
| | | .u-radio-group { |
| | | flex: 1; |
| | | |
| | | &--row { |
| | | @include flex; |
| | | } |
| | | |
| | | &--column { |
| | | @include flex(column); |
| | | } |
| | | } |
| | | </style> |