vue使用iframe切换src路径时不重新刷新

vue使用iframe切换src路径时不重新刷新

需求:
有一个下拉框联动着iframe的src,下拉框每切换一下,iframe就重新刷新一下。
问题:
如果只是用v-model去绑定iframe的src,手动修改是无法完成重新请求刷新的。
解决思路:
因为使用docment去操作iframe的很麻烦,还有跨域的问题,所以使用v-if的方式重新渲染页面。
实现步骤

<div class="form_box_item">
          <el-form :model="warehouse" :inline="true" label-width="50px" style="margin-top: -10px;margin-bottom: 10px">
            <el-row :gutter="10">
              <el-col :span="22">
                <el-form-item label="仓号:" prop="warehouse">
                  <el-select v-model="warehouse.cloudId" size="small" @change="handleIframe">
                    <el-option v-for=" (item,index) in warehouseList" :key="index" :label="item.warehouseName"
                               :value="item.cloudId">
                    </el-option>
                  </el-select>
                </el-form-item>
              </el-col>
              <el-col :span="2">
                <el-form-item>
                  <el-button size="mini" @click="retureRoute()" v-show="showReture">返回</el-button>
                </el-form-item>
              </el-col>
         </el-row>
      </el-form>
</div>
<div style="height:700px;margin-top: -50px;margin-bottom: 20px">
   <iframe :src="flowSrc" style="height:100%; width:100%;margin:0;border:0;" v-if="loading" ref="iframeId" id="myFrameId" name="myFrameName"></iframe>
 </div>

方法

data() {
      return {
        warehouseList: [],
        warehouse: {
          cloudId: undefined
        },
        loading: true,
        flowSrc: '',
        showReture: false
      };
    },
methods: {
      /** 切换仓房 */
      handleIframe(e) {
        console.log('切换', e)
        this.warehouse.cloudId = e
        this.loading = false
        this.flowSrc = 'http://10.0.11.9:2080/#/grain-room/condition/current?user=grainszy&pass=bupt%40Htl301&grainRoomId=' + this.warehouse.cloudId;  //直接给flowSrc赋值链接
        setTimeout(()=>{
          this.loading = true
        },1000)
      }
    }

v-if做一个延迟加载就可以啦

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Vue中,如果iframesrc属性重复刷新,可能是因为Vue的数据绑定机制导致的。当数据发生变化Vue自动重新渲染组件,如果iframesrc属性绑定了一个动态的数据,每次数据变化导致iframe重新加载。解决方法可以使用v-if指令来控制iframe的显示和隐藏,或者使用key属性来强制组件重新渲染。 ### 回答2: 在Vue使用iframe元素,如果iframesrc属性重复刷新,可能遇到一些问题。这个问题通常出现在开发人员使用Vue.js框架在应用程序中不断更改组件,或者在动态加载组件。经过分析,可以得出这是因为iframe无法保存其状态,因此每次刷新它都加载完整的网页。 为了解决这个问题,有几种方法可以尝试。首先,可以考虑使用Vue的keep-alive组件来缓存已经加载的组件,避免重复刷新。在使用keep-alive,需要确保在组件中的任何逻辑中不iframesrc属性进行任何更改。此外,还可以使用Vue的v-show指令来显示或隐藏iframe元素,而不是动态更改src属性。 另外,也可以考虑使用Vue的watcher机制来监视src属性的更改,并在必要进行调整。具体来说,可以在Vue组件对象中定义一个watcher,以便在发现src属性更改执行适当的逻辑。例如,如果src属性一直重复刷新,则可以在watcher中设置一个标志来指示iframe是否已经加载,以便避免重复加载。 最后,如果上述方法都无法解决问题,则可能需要使用Vue的异步组件功能。异步加载组件可以避免在每次更改重新加载整个组件,从而提高性能并将iframe刷新次数降至最低。 综上所述,iframesrc重复刷新是一个常见的Vue.js应用程序问题。为了解决这个问题,开发人员可以考虑使用Vue的keep-alive,v-show或watcher机制,或者使用异步组件来优化应用程序并减少iframe刷新次数。 ### 回答3: vueiframesrc重复刷新是指在不更改iframesrc属性,对iframe进行多次重载或刷新操作。这种现象通常出现在需要通过iframe嵌入外部网页或应用程序的情况下。 造成这种问题的主要原因是由于vue的强制刷新机制。在vue中,当组件状态发生变化或数据更vue根据v-for、v-if、v-show等指令重新渲染组件,并将的DOM插入到页面中。针对iframe的嵌入,这使iframesrc属性重新加载,从而导致重复刷新。 为了解决这个问题,可以使用vue中的vue-iframe插件来代替原生的iframe标签进行嵌入。vue-iframe插件采用的是vue的数据渲染方式,将iframe当作一个子组件进行管理。这样,即使在重新渲染组件,也不影响到iframesrc属性,避免了重复刷新。 另一种解决方案是通过监听iframe的load事件来控制iframe刷新。在iframe中设置监听事件,在事件中动态更改iframesrc属性来达到刷新的目的。只有当需要刷新页面才触发iframe的load事件,这样就可以避免多次重复刷新的问题。 总之,在vue使用iframe标签进行嵌入,需要注意原生iframe标签的刷新特性,同可以采用vue-iframe插件、监听iframe的load事件等方式来避免重复刷新的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值