Angularjs 传单JS:映射容器已初始化
我正在我的Ionic 2应用程序中使用传单。第一次运行应用程序时。一切都好。但如果我转到另一页并返回地图,我会得到以下异常: 异常:错误:未捕获(承诺中):异常:build/pages/map/map中的错误。html:12:18 原始异常:错误:映射容器已初始化。 原始堆栈跟踪: 错误:映射容器已初始化。 返回此页时,专用变量映射为null。检查这个变量是否为being null没有效果,因为我认为问题在于新的L.Map('mainmap'Angularjs 传单JS:映射容器已初始化,angularjs,angular,ionic-framework,leaflet,ionic2,Angularjs,Angular,Ionic Framework,Leaflet,Ionic2,我正在我的Ionic 2应用程序中使用传单。第一次运行应用程序时。一切都好。但如果我转到另一页并返回地图,我会得到以下异常: 异常:错误:未捕获(承诺中):异常:build/pages/map/map中的错误。html:12:18 原始异常:错误:映射容器已初始化。 原始堆栈跟踪: 错误:映射容器已初始化。 返回此页时,专用变量映射为null。检查这个变量是否为being null没有效果,因为我认为问题在于新的L.Map('mainmap' 如果(this.map==null)您的ngOnIn
如果(this.map==null)
您的ngOnInit()
中的条件始终是true
,因为当您实例化一个新的MainMapComponent
时,该新实例将获得它自己的全新this.map
,因此尚未分配(即未定义的
)
这与您的“mainmap”
div容器可能发生的情况完全不同
为了更符合您的问题描述,当导航离开地图时,您的“mainmap”
div容器仍然保存着一个地图。当返回到您的页面时,您的应用程序似乎实例化了一个新的MainMapComponent
实例,其中包含一个新的(尚未分配的)实例this.map
,因此它尝试在“mainmap”
div容器中初始化一个新映射。这就是产生错误的原因
您可以尝试在您的<代码>主MAPMAPICS < /COD>实例被破坏时,使<代码>“MaMMAP”DIV状态与存在(或不存在)一致。属于MainMapComponent
的一个实例。但是,如果出于任何原因,您同时拥有多个MainMapComponent
实例,则这并不能解决您的问题
更新:
至于最后提到的问题,请参见如果您的ngOnInit()
中的条件(this.map==null)
总是true
,因为当您实例化一个新的MainMapComponent
时,该新实例将获得其自己的全新this.map
,因此尚未分配(即未定义的)
这与您的“mainmap”
div容器可能发生的情况完全不同
为了更符合您的问题描述,当导航离开地图时,您的“mainmap”
div容器仍然保存着一个地图。当返回到您的页面时,您的应用程序似乎实例化了一个新的MainMapComponent
实例,其中包含一个新的(尚未分配的)实例this.map
,因此它尝试在“mainmap”
div容器中初始化一个新映射。这就是产生错误的原因
您可以尝试在您的<代码>主MAPMAPICS < /COD>实例被破坏时,使<代码>“MaMMAP”DIV状态与存在(或不存在)一致。属于MainMapComponent
的一个实例。但是,如果出于任何原因,您同时拥有多个MainMapComponent
实例,则这并不能解决您的问题
更新:
关于最后提到的问题,请参见可能不是最优雅的解决方案,但对我来说有效的方法是在用户离开视图时删除地图:
ionViewCanLeave(){
document.getElementById("mainmap").outerHTML = "";
}
来源:可能不是最优雅的解决方案,但对我来说有效的方法是在用户离开视图时删除地图:
ionViewCanLeave(){
document.getElementById("mainmap").outerHTML = "";
}
来源:与您的组件关联的模板的代码是什么?您的mainmap
位于何处?在您的组件模板中?谢谢!与您的组件关联的模板的代码是什么?以及您的mainmap
位于何处?在您的组件模板中?谢谢!我没有实例化多个主映射MapComponents,但在onInit()中,它再次在同一个div上调用新的L.Map()。我不知道如何检查DOM元素是否已经用映射初始化。只需查找可能的子节点,这些子节点将已经由另一个传单实例化添加……不,我确信这是我的第一个ngOnInit()的实例。但是如何让intsance返回到我的this.map变量?我不确定我是否理解您上面的评论…:-S而不是检查this.map==null
(可能总是true
),您可以尝试类似document.getElementById(“mainmap”)的操作.firstNode
例如。但这可能会破坏您的代码,因为它可能确实需要以某种方式实例化两次您的组件(您没有提供任何上下文,也没有提供您认为确定的证据,所以谁知道呢?)我为您的问题描述添加了更多特定的细节。我没有实例化多个MainMapComponents,而是在onInit()中它再次在同一个div上调用新的L.Map()。我不知道如何检查DOM元素是否已使用映射进行初始化。只需查找可能的子节点,这些子节点将由另一个传单实例化添加……不,我确信这是我的第一个ngOnInit()的实例。但是如何让intsance返回到我的this.map变量?我不确定我是否理解您上面的评论…:-S而不是检查this.map==null
(可能总是true
),您可以尝试类似document.getElementById(“mainmap”)的操作.firstNode
例如。但这可能会破坏您的代码,因为它可能确实需要以某种方式实例化两次您的组件(您没有提供任何上下文,也没有提供您认为确定的证据,所以谁知道呢?)我为您的问题描述添加了更多特定的细节。