查看源码的基本方法(oj)

查看源码的基本方法(oj)

1.下拉框主要功能实现

 <el-select-menu
        ref="popper"
        :append-to-body="popperAppendToBody"
        v-show="visible && emptyText !== false">
        <el-scrollbar
          tag="ul"
          wrap-class="el-select-dropdown__wrap"
          view-class="el-select-dropdown__list"
          ref="scrollbar"
          :class="{ 'is-empty': !allowCreate && query && filteredOptionsCount === 0 }"
          v-show="options.length > 0 && !loading">
          <el-option
            :value="query"
            created
            v-if="showNewOption">
          </el-option>
          <slot></slot>
        </el-scrollbar>
        <template v-if="emptyText && (!allowCreate || loading || (allowCreate && options.length === 0 ))">
          <slot name="empty" v-if="$slots.empty"></slot>
          <p class="el-select-dropdown__empty" v-else>
            {{ emptyText }}
          </p>
        </template>
      </el-select-menu>



//其中:
name=“el-zoom-in-top”
//el-zoom实现下拉框出现以及消失时的动画效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TG8WDXGl-1649426594139)(C:\Users\摩尔庄园\Pictures\Saved Pictures\屏幕截图 2022-04-01 175417.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nBR41sED-1649426594140)(C:\Users\摩尔庄园\AppData\Roaming\Typora\typora-user-images\image-20220401175730766.png)]

​ $nextTick官方解释: 在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。

所以handleMenuEnter大概效果是当this.scrollToOption(this.selected))的值变化时,执行这个nextTick这个写好的回调函数,使下拉框出现。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cygi4A1f-1649426594140)(C:\Users\摩尔庄园\Pictures\Saved Pictures\屏幕截图 2022-04-01 181039.png)]

ref 写在标签上时:this.$refs.名字 获取的是标签对应的dom元素,ref 写在组件上时:这时候获取到的是 子组件 的引用\

v-show=“options.length > 0 && !loading”
//options.length>0保证下拉框有东西可出现,!loading保证下拉框不在加载中出现,而是在加载完后出现

v-if=“showNewOption”

showNewOption() {
let hasExistingOption = this.options.filter(option => !option.created)
.some(option => option.currentLabel === this.query);
return this.filterable && this.allowCreate && this.query !== ‘’ && !hasExistingOption;
},
//表示在option.currentLabel 中存在与 this.query相等的值时,下拉框中出现与搜索值相匹配的值,
用于可搜索下拉框。

2.鼠标移入移出下拉框分别出现叉和下三角主要功能实现

 @mouseenter.native="inputHovering = true"
 @mouseleave.native="inputHovering = false">
//主要是这两个语句
inputHovering:

showClose() {
        let hasValue = this.multiple4
          ? Array.isArray(this.value) && this.value.length > 0
          : this.value !== undefined && this.value !== null && this.value !== '';
        let criteria = this.clearable &&
          !this.selectDisabled &&
          this.inputHovering &&
          hasValue;
        return criteria;
      },
//首先把可多选multiple赋值给hasvalue再进行三目运算,
有值返回Array.isArray(this.value)&& this.value.length > 0
无值返回this.value !== undefined && this.value !== null && this.value !== ''



再令criteria等于clearable,即可清除的
!this.selectDisabled,表示非禁用状态
 this.inputHovering ,表示鼠标正在下拉框上
hasValue,表示下拉框里有值
以上条件都满足的话就显示叉,不满足的话显示下三角
 @mouseenter.native="inputHovering = true"
 @mouseleave.native="inputHovering = false"
而鼠标移入移出的判断初始值相反,判断条件相同,所以两个动作总显示不同的图标

3.实现下三角的旋转

iconClass() {
        return this.remote && this.filterable ? '' : (this.visible ? 'arrow-up is-reverse' : 'arrow-up');
      },
//主要的实现
//this.visible ? 'arrow-up is-reverse' : 'arrow-up'
一个三目运算,如果visible为真,即下拉框中有值,返回arrow-up is-reverse,
is reverse是写好的语句,实现的功能是将arrow-up旋转,在浏览器的元素中可见
如果visible为假,下三角不变

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XNtbmubG-1649426594140)(C:\Users\摩尔庄园\Pictures\Saved Pictures\屏幕截图 2022-04-01 194146.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0MoX7Seo-1649426594141)(C:\Users\摩尔庄园\Pictures\Saved Pictures\QQ图片20220401194733.png)]

控制台的截图,点击下三角is-reverse生效,div的style发生改变。

关于.antive

他是监听组件根元素的原生事件,即给自定义的组件添加原生事件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4KIokhGu-1649426594141)(file:///C:/Users/%E6%91%A9%E5%B0%94%E5%BA%84%E5%9B%AD/Pictures/Saved%20Pictures/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-04-01%20195510.png)]

在中.native不生效,clickfn事件不会触发,以为不是自定义的标签

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bZmqPFmF-1649426594141)(C:\Users\摩尔庄园\Pictures\Saved Pictures\屏幕截图 2022-04-01 195904.png)]

这样就可以触发了,因为标签是你自定义的

用法:

<自定义的组件标签 @click.native=‘事件名’>

小结:

1.ctrl + p搜索文件名

2.ctrl + f 搜索你想要的函数

3.找到函数后ctrl + 左击进入想查询的数据

4.不要过于纠结变量名和非必要语句,弄清楚函数的大概逻辑和触发条件


版权声明:本文为qq_62087717原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。