zoukankan      html  css  js  c++  java
  • ElementPopover组件的动态ref参数

    最终实现方式在最后面

    博客园你啊347

    在开发的时候有一个小需求
    在一个步骤列表中, 每个步骤有步骤id,步骤描述, 步骤图片, 步骤视频这几个基本元素
    其中, 步骤视频是非必要的, 可以为空(null 或 empty, 这个有点扯, 居然没有统一)

    然后具体需求是: 当鼠标悬浮在图片上时, 利用popover, 在图片的右侧(placement="right") 显示视频
    (视频组件直接用的video标签实现的) 博客园你啊347

    那么查看elementUI的组件文档可以知道, 触发Popover的元素有两种写法
    1. 使用slot="reference"博客园你啊347
    2. 使用自定义指令v-popover指向Popover的索引ref博客园你啊347

    (参考elementUI文档https://element.eleme.cn/2.13/#/zh-CN/component/popover)

    一开始用的是第一种, 但是后面发现在这个需求里面会有点问题博客园你啊347

    点击查看代码
    <div
      class="item"
      v-for="(item, index) in array.steps"
      :key="index"
    >
      <el-popover
        v-if="item.video && item.video !== ''"
        placement="right"
        title="步骤视频"
        trigger="hover"
      >
        <video
          :src="item.video"
          controls="controls"
          style=" 400px; height: 300"
        ></video>
        
        <!--这里是做popover的slot-->
        <div class="image" slot="reference">
          <el-image
            :src="item.photo"
            style=" 100%; height: 100%"
            fit="cover"
            :z-index="2030"
          >
          </el-image>
        </div>
      </el-popover>
    </div>

     可以看到, 整个步骤列表循环是通过 v-for="(item, index) in array.steps" 进行控制的
    然后把el-popover放在里面就可以实现 每个步骤一个popover,
    再把slot指定为el-image外面那个盒子, 以此实现悬浮显示对应步骤视频的需求

    但是, 这里有个问题, 就是 v-if="item.video && item.video !== ''" 这段代码如果不成立的话, 那么图片也会跟着不显示博客园你啊347
    所以这个需求用slot这个方式是不行的


     那么还可以用自定义指令 v-popover的方式实现博客园你啊347
    但是elementUI文档里面没提到可以使用动态参数的方式设置v-popover:ref的值博客园你啊347

    可以看到文档里面 v-popover:popover是写死上面组件ref的值的, 如果想要实现动态效果就得从这里下手

    一般来说如果想要在element的组件属性绑定动态参数(data里面的或者其他局部变量) 直接在变量前面加个冒号就好了  :src="`http://`+domain + suffix" 类似于这样的 
    那么v-popover这个属性按道理也可以, 只是文档没说具体写法

    下面就是最终实现方式了 

    点击查看代码
    <div
      class="item"
      v-for="(item, index) in array.steps"
      :key="index"
    >
      <el-popover
        v-if="item.video && item.video !== ''"
        placement="right"
        title="步骤视频"
        trigger="hover"
        注意这里ref参数的stepVideoRef是被单引号(ESC正下方那个按键), 解释成字符串, 然后跟最外层for循环的index进行绑定, 形成不同的内容
        :ref="`stepVideoRef` + index"
      >
        <video
          :src="item.video"
          controls="controls"
          style=" 400px; height: 300"
        ></video>
      </el-popover>
          
      <!--这里是用的是动态的自定义指令, 就是没一个步骤对应的popover的索引都不一样了, 因为是用index做了控制-->
      <!--之后每一个popover的ref就是stepVideoRef0 stepVideoRef1 stepVideoRef2 stepVideoRef3 ... 这样了-->
      <div class="image"  v-popover="`stepVideoRef` + index">
        <el-image	
          :src="item.photo"
          style=" 100%; height: 100%"
          fit="cover"
          :z-index="2030"
        >
        </el-image>
      </div>
    </div>

    以上就解决了el-popover循环动态自定义指令v-popover的需求

    v-popover:refName 改成 v-popover="`refNameTemplate` + index"  index可以任意变量, 但必须与ref保持一致
    然后<el-popover :ref="`refNameTemplate` + index"> 和 v-popover指令的索引名称保持一致即可

    asdf博客园你啊347

    的adf

    本文来自博客园,作者:你啊347,转载请注明原文链接:https://www.cnblogs.com/LinKinSJ/p/15588630.html

  • 相关阅读:
    03_ if 练习 _ little2big
    uva 11275 3D Triangles
    uva 12296 Pieces and Discs
    uvalive 3218 Find the Border
    uvalive 2797 Monster Trap
    uvalive 4992 Jungle Outpost
    uva 2218 Triathlon
    uvalive 3890 Most Distant Point from the Sea
    uvalive 4728 Squares
    uva 10256 The Great Divide
  • 原文地址:https://www.cnblogs.com/LinKinSJ/p/15588630.html
Copyright © 2011-2022 走看看