element-ui radio-button组件源码学习
发布时间:2020-12-14 23:49:55 所属栏目:资源 来源:网络整理
导读:前面看了radio组件的源码,接下来看下,与其类似的radio-group组件的源码。 一、html结构 最外层是一个label元素,使用了el-radio-button类。和radio类似,动态的class如下: :class="[ size ? 'el-radio-button--' + size : '',{ 'is-active': value === la
前面看了radio组件的源码,接下来看下,与其类似的radio-group组件的源码。 一、html结构最外层是一个label元素,使用了el-radio-button类。和radio类似,动态的class如下: :class="[ size ? 'el-radio-button--' + size : '',{ 'is-active': value === label },{ 'is-disabled': isDisabled },{ 'is-focus': focus } ]" size控制了radio-group的尺寸,剩下的还有active状态,disabled状态和focus状态的样式。 往内一层是一个原生的radio和span标签。 和radio类似,此input元素设置了change、focus和blur事件,由于设置了-1的tabindex,所以他不能被tab键选中。radiobutton中的给了z-index为-1的属性,所以我们看不到此元素。 input元素之后是实际显示内容的,当组件标签在使用时有内容时,则显示,否则显示对应的label的值。 <!-- 组件标签之间的内容显示 --> <slot></slot> <!-- 组件标签没有内容则,直接显示该组件的label值 --> <template v-if="!$slots.default">{{label}}</template> 二、JS部分name名称 mixins混入广播事件 inject注入了elForm和elFormItem,当没有与form和formitem使用时,此处的默认值就有用了。 props
data()
computed
value: { get() { // 直接返回group的值 return this._radioGroup.value; },set(value) { // 修改radio-group组件中的model值 this._radioGroup.$emit('input',value); } // 也就是radio-button必须和radio-group组件配合使用,因为他没有对应的model值, // 他所使用的都是group的。 }
_radioGroup() { let parent = this.$parent; // 循环向父级查找 while (parent) { if (parent.$options.componentName !== 'ElRadioGroup') { parent = parent.$parent; } else { // 返回对应的父组件引用 return parent; } } return false; }
methods
handleChange() { this.$nextTick(() => { // 由于是radiobutton要和group一起使用,所以没有判断是否有group组件。 this.dispatch('ElRadioGroup','handleChange',this.value); }); } 附上带注释的源码:radio-button.vue 。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |