activeWhen 正在监听 url
我们有 ABC 应用程序,我们的 url 结构必须是主机名/A/B/C 如果我只想显示 C 微应用程序,activeWhen("hostname/A/B/C") 但来自 A 和 B 的所有父应用程序都会也出现..
无论如何是解决方法(不改变url结构)。
以及为什么它会加载所有父应用程序。不是 active 什么时候需要匹配而不是部分匹配?
另一个问题,如何像 single-spa-inspector 一样强制加载应用程序
谢谢你调查它
activeWhen 正在监听 url
我们有 ABC 应用程序,我们的 url 结构必须是主机名/A/B/C 如果我只想显示 C 微应用程序,activeWhen("hostname/A/B/C") 但来自 A 和 B 的所有父应用程序都会也出现..
无论如何是解决方法(不改变url结构)。
以及为什么它会加载所有父应用程序。不是 active 什么时候需要匹配而不是部分匹配?
另一个问题,如何像 single-spa-inspector 一样强制加载应用程序
谢谢你调查它
是的,有一个解决方法。
当您将字符串传递给 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
});