当iframe中的地址src需要动态改变时,需要使用Vue.nextTick来切换地址src,否则DOM的地址不会实现更新,而是保持上一次的src。
在数据变化后要执行的某个操作,而这个操作需要使用随数据改变而改变的DOM结构的时候,这个操作都应该放进
Vue.nextTick()
的回调函数中。在Vue的生命周期
created()
钩子函数执行的时候DOM 其实并未进行任何渲染,而此时进行DOM操作无异于徒劳,所以此处一定要将DOM操作的ts代码放进
Vue.nextTick()
的回调函数中。与之对应的就是
mounted()
钩子函数,因为该钩子函数执行时所有的DOM挂载和渲染都已完成,此时在该钩子函数中进行任何DOM操作才不会有问题 。
Vue.nextTick(()=>{
this.ifamSrc=document.getElementById("iframId"); //通过ID获取iframe对象
this.ifamSrc.removeAttribute("src"); //先移除上一次的src地址
this.ifamSrc.setAttribute("src","xxx"); //更新当前地址
当iframe中的地址src需要动态改变时,需要使用Vue.nextTick来切换地址src,否则DOM的地址不会实现更新,而是保持上一次的src。在数据变化后要执行的某个操作,而这个操作需要使用随数据改变而改变的DOM结构的时候,这个操作都应该放进Vue.nextTick()的回调函数中。在Vue的生命周期created()钩子函数执行的时候DOM 其实并未进行任何渲染,而此时进行DOM操作...
本文主要给大家介绍了关于Vue.nextTick()的正确使用,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
什么是Vue.nextTick()
官方文档解释如下:
在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。
我理解的官方文档的这句话的侧重点在最后那半句获取更新后的DOM,获取更新后的DOM言外之意就是什么操作需要用到了更新后的DOM而不能使用之前的DOM或者使用更新前的DOM或出问题,所以就衍生出了这个获取更新后的DOM的Vue方法。所以放在Vue.nextTick()回调函数中的执行的应该是会对DOM进行操作
// 判断iframe是否加载完毕
if (!/*@cc_on!@*/0) { // if not IE 判断不是ie
iframe.onload = function() {
that.loading = false
} else {
iframe.onreadystatechange = fun.
import React from 'react';
import { connect } from 'react-redux';
import { Helmet } from "react-helmet"; // 引用head管理工具
class HeadHelmet extends React.Component {
render () {
主要获取iframe里面的文档对象,就可以任意操作iframe的内容
//contentDocument 属性能够以 HTML 对象来返回 iframe 中的文档。可以通过所有标准的 DOM 方法来处理被返回的对象。
//querySelector 选择器 当然也可用 id 或者class 等选着器代替
document.querySelector('iframe').contentWindow.location.reload();