【问题标题】:Is this normal behavior? single-spa activeWhen这是正常行为吗?单spa activeWhen
【发布时间】:2021-07-29 12:58:08
【问题描述】:
activeWhen 正在监听 url
我们有 A B C 应用程序,我们的 url 结构必须是主机名/A/B/C
如果我只想显示 C 微应用,activeWhen("hostname/A/B/C")
但 A 和 B 的所有父应用程序也会出现..
无论如何都可以解决(不更改 url 结构)。
以及为什么它会加载所有父应用程序。不是active什么时候需要匹配而不是部分匹配?
另一个问题,如何像 single-spa-inspector 一样强制加载应用程序
感谢您的调查
【问题讨论】:
标签:
single-spa
single-spa-angular
【解决方案1】:
是的,有一个解决方法。
当您将字符串传递给 activeWhen 数组时,它将在 URL 以该字符串开头时匹配。因此,具有activeWhen: ['/a'] 和activeWhen: ['/a/b'] 的父应用也将匹配主机名/A/B/C。这对嵌套路由很有帮助。
如果您只想在路径名完全等于字符串时进行匹配,您可以将函数添加到 activeWhen 数组而不是字符串。 activeWhen 数组中的函数将接收window.location 作为参数。
示例:
singleSpa.registerApplication({
name: 'a',
app: () => import('src/a.js'),
activeWhen: [(location) => location.pathname === '/a'] // will only match '/a' exactly
});
singleSpa.registerApplication({
name: 'b',
app: () => import('src/b.js'),
activeWhen: [(location) => location.pathname === '/b'] // will only match '/b' exactly
});
singleSpa.registerApplication({
name: 'c',
app: () => import('src/c.js'),
activeWhen: [(location) => location.pathname === '/a/b/c'] // will only match '/a/b/c' exactly
});