Angularjs 传单JS:映射容器已初始化

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

我正在我的Ionic 2应用程序中使用传单。第一次运行应用程序时。一切都好。但如果我转到另一页并返回地图,我会得到以下异常:

异常:错误:未捕获(承诺中):异常:build/pages/map/map中的错误。html:12:18 原始异常:错误:映射容器已初始化。 原始堆栈跟踪: 错误:映射容器已初始化。

返回此页时,专用变量映射为null。检查这个变量是否为being null没有效果,因为我认为问题在于新的L.Map('mainmap'

如果(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
例如。但这可能会破坏您的代码,因为它可能确实需要以某种方式实例化两次您的组件(您没有提供任何上下文,也没有提供您认为确定的证据,所以谁知道呢?)我为您的问题描述添加了更多特定的细节。