当前位置: 首页 > wzjs >正文

今日国内新闻摘抄十条2023厦门网站综合优化贵吗

今日国内新闻摘抄十条2023,厦门网站综合优化贵吗,如何制作网站的步骤,网站制作的发展趋势根据你提供的代码,父组件 index.vue 在 mounted 中初始化 map2d,但子组件可能在父组件 map2d 初始化完成前就已经挂载,导致访问 window.map2d 时仍为 null。以下是分步解决方案: 核心问题分析 生命周期顺序: 父组件的…

根据你提供的代码,父组件 index.vuemounted 中初始化 map2d,但子组件可能在父组件 map2d 初始化完成前就已经挂载,导致访问 window.map2d 时仍为 null。以下是分步解决方案:

核心问题分析

  1. 生命周期顺序

    • 父组件的 mounted 钩子会在子组件的 mounted 之前执行,但父组件中 map2d 的初始化是异步的(需要加载地图资源),因此子组件的 mounted 钩子可能在 map2d 完成初始化前执行。
  2. 依赖全局变量

    • 子组件直接通过 window.map2d 访问父组件的地图实例,但父组件的 map2d 尚未赋值或加载完成。

解决方案

方法 1:使用事件总线

通过事件总线实现父子组件通信,父组件在 map2d 加载完成后触发事件,子组件监听事件后再初始化标记。

父组件(index.vue)修改:

<script>
// 引入事件总线
import { eventBus } from './eventBus.js';export default {methods: {initMap2d() {const map = new SFMap.Map(options);this.map = map;window.map2d = map;// 监听地图加载完成事件map.once('load', () => {eventBus.$emit('map2d-ready'); // 触发自定义事件});}}
}
</script>

子组件修改:

<script>
import { eventBus } from './eventBus.js';export default {mounted() {// 监听父组件的事件eventBus.$on('map2d-ready', () => {this.init(); // 初始化标记});}
}
</script>
方法 2:使用 provide/inject

父组件通过 provide 暴露 map2d 实例,子组件通过 inject 获取并监听其加载状态。

父组件(index.vue)修改:

<script>
export default {provide() {return {map2d: this.map // 暴露 map2d 实例};},methods: {initMap2d() {const map = new SFMap.Map(options);this.map = map;window.map2d = map;// 监听地图加载完成后更新 provide 的值map.once('load', () => {this.$forceUpdate(); // 触发 provide 的更新});}}
}
</script>

子组件修改:

<script>
export default {inject: ['map2d'], // 注入父组件的 map2dmounted() {if (this.map2d) {// 直接使用注入的 map2dthis.map2d.once('load', () => {this.init(); // 初始化标记});}}
}
</script>
方法 3:调整子组件生命周期钩子

使用 nextTickwatch 确保子组件在父组件 DOM 更新后再执行初始化。

子组件修改:

<script>
export default {mounted() {this.$nextTick(() => {// 等待父组件 DOM 更新完成if (window.map2d) {this.init();} else {// 监听全局 map2d 的变化const observer = new MutationObserver(() => {if (window.map2d) {this.init();observer.disconnect();}});observer.observe(window, {childList: true,subtree: true});}});}
}
</script>
方法 4:watch

关键总结

  1. 避免直接依赖全局变量:通过组件通信(事件总线、provide/inject)传递 map2d 实例,避免因全局变量未及时更新导致的问题。
  2. 监听地图加载事件:在父组件中,确保 map2dload 事件触发后再通知子组件初始化。
  3. 生命周期控制:使用 nextTickwatch 确保子组件在父组件完成异步操作后再执行逻辑。

通过以上方法,可以确保子组件在父组件的 map2d 实例完全初始化后再进行标记渲染。

Vue2 中的 provide 和 inject 主要用于组件间的依赖注入,通常用于祖孙组件之间的通信。父组件通过 provide 提供数据,子组件通过 inject 接收。但默认情况下,provide 的数据是静态的,父组件更新数据时,子组件不会自动响应。用户的问题是父组件自己如何改变 provide 的数据,并让子组件感知到变化。

在Vue2中,父组件修改通过provide提供的数据并让子组件响应式更新,需要将数据包装为响应式对象。以下是具体实现步骤:

1. 父组件:提供响应式数据

使用Vue.observable将数据转换为响应式对象,然后通过provide暴露:

<template><div><button @click="changeData">修改父组件数据</button></div>
</template><script>
import Vue from 'vue';export default {data() {return {// 使用 Vue.observable 创建响应式对象reactiveData: Vue.observable({ value: '初始值' })};},provide() {return {// 提供响应式对象reactiveData: this.reactiveData};},methods: {changeData() {// 直接修改响应式对象的属性this.reactiveData.value = '父组件修改后的值';}}
};
</script>

2. 子组件:注入并使用数据

通过inject接收数据,修改后子组件会自动响应:

<template><div>子组件接收到的数据:{{ reactiveData.value }}</div>
</template><script>
export default {inject: ['reactiveData'], // 注入父组件提供的 reactiveData// 当 reactiveData.value 变化时,模板会自动更新
};
</script>

关键点说明:

  • 为什么使用Vue.observable
    Vue2的provide/inject默认是非响应式的,必须将数据包装为响应式对象(如Vue.observable)才能触发子组件更新。
  • 修改方式
    父组件直接修改响应式对象的属性(如this.reactiveData.value = '新值'),子组件会自动感知变化。
  • 子组件修改数据
    若子组件需要修改数据,可通过调用父组件提供的方法(如通过provide传递一个修改函数)。

替代方案(父子组件直接通信)

如果是直接父子组件,推荐使用props和事件实现响应式更新,更直观:

<!-- 父组件 -->
<ChildComponent :data="parentData" @update-data="handleUpdate" /><script>
export default {data() {return { parentData: '初始值' };},methods: {handleUpdate(newValue) {this.parentData = newValue;}}
};
</script><!-- 子组件 -->
<template><div>{{ data }}<button @click="updateData">修改</button></div>
</template><script>
export default {props: ['data'],methods: {updateData() {this.$emit('update-data', '新值');}}
};
</script>

总结:

  • 祖孙组件通信:使用provide/inject + Vue.observable
  • 直接父子组件:优先使用props和事件。
http://www.dtcms.com/wzjs/88174.html

相关文章:

  • 如何建立一个自己的网站线下推广方法有哪些
  • 制作论坛做网站制作公司网站的步骤
  • 珍佰农 商城网站建设网络销售工作靠谱吗
  • 技术支持 佛山网站建设今天上海重大新闻事件
  • 做ppt时网站怎么设计南昌seo网站排名
  • 安新建设局网站搜索引擎seo关键词优化
  • b2c综合商城有哪些搜索引擎优化的基本原理
  • 学校的网站怎么做的好创建网站的流程
  • 最吃香的男生十大手艺秦皇岛seo排名
  • wordpress 插入php代码百中搜优化
  • 高端品牌网站建设明细报价报外贸独立站怎么建站
  • 河南郑州网站建设合肥百度推广优化排名
  • 拥有响应式网站seo优化系统
  • 搭建发卡网站要多少钱关键词优化seo优化排名
  • 3 建设营销型网站流程图天津seo招聘
  • 购物导购网站开发合肥网站seo
  • seo网站项目讲解网页制作的软件
  • 专业的常州做网站湛江seo推广公司
  • 银川做网站公司如何用模板建站
  • 深圳市门户网站建设郑州网站设计有哪些
  • php动态网站开发的基本流程淘宝seo排名优化的方法
  • 网站怎么做 凡科网站域名解析ip
  • 淄博外贸网站制作百度收录入口
  • 网站建设 日志中国百强城市榜单
  • 广州建设网站怎么做文章推广平台
  • 网站建设有什么系统南宁百度推广排名优化
  • 在洪雅网站做企业招聘百度打广告多少钱一个月
  • 做美食哪些类型网站巨量算数
  • 哪些网上订餐的网站做的好新浪微指数
  • 网站建设的作用有哪些seo广告优化多少钱