Angular 7-多个插座:错误:无法激活已经激活的插座

时间:2019-04-10 16:55:29

标签: angular7 children router-outlet routerlink

这是我在Angular 7中遇到的问题:

我有两个出口:主要的应用路由器出口和一个名为“ administration”的辅助出口。

当我想在开始时浏览任何管理链接时,都可以正常工作。但是下一次,当我尝试导航时,角度抛出此错误消息:

  

错误:无法激活已经激活的插座

那么,有人可以解释一下为什么吗?我在论坛上找不到任何解决方案...

这是一次大爆炸:https://stackblitz.com/edit/angular-osnnd4

谢谢大家:)

5 个答案:

答案 0 :(得分:3)

这可能很愚蠢,但对于正在寻求解决方案的任何人: 确保内部或子级出口中没有未定义的变量。

我在项目中解决了这个问题,一切恢复了正常。

答案 1 :(得分:3)

我的问题: 基本上,我的命名插座不会停用,在我的情况下,我会将其用于一堆不同的模态,并且虽然手动停用我的模态插座可以工作,但在将不同的路径和相同的组件加载到插座时却无法工作。

因此,如@Andreas在此处(https://github.com/angular/angular/issues/20694#issuecomment-595707956)所指出。我没有用于空路径的任何已分配组件,因此我猜测它因此无法以某种方式停用出口,因此我只为路径“”分配了一个emptyComponent。

这是我的路由器常数:

 {
    outlet: "modal",
    path: "",
    component: EmptyComponent,
  },

答案 2 :(得分:0)

延迟加载子路由时会出现问题。每次更改路线时,您都必须手动停用出口。

我已将您的AdministrationComponent修改为以下变通办法。直到Angular有办法解决问题之前,它应该可以正常工作。

function pdf_redirect() {
var ro_no = $('#addNew input[name=ro_no]').val();

//alert(ro_no);

$.redirect("letters/Release_Order_letter.php",
{
    ro_no: ro_no
}, "POST", "_blank");


$.redirect("letters/tax_invoice.php",
{
    ro_no: ro_no
},"POST", "_blank");

}

答案 3 :(得分:0)

彻底检查您是否在其父模块或其他一些模块中导入了延迟加载的模块,而不管路由如何。如果是这样,请从那里删除其导入这就是我的情况。

答案 4 :(得分:0)

我的问题是我有一个登录警卫,它通过 this.router.navigate 执行重定向,而警卫在重定向后返回 true

当我将代码更改为在重定向的情况下返回 false 时,问题就消失了。