首页 > 解决方案 > 这是正常行为吗?单spa activeWhen

问题描述

activeWhen 正在监听 url

我们有 ABC 应用程序,我们的 url 结构必须是主机名/A/B/C 如果我只想显示 C 微应用程序,activeWhen("hostname/A/B/C") 但来自 A 和 B 的所有父应用程序都会也出现..
无论如何是解决方法(不改变url结构)。
以及为什么它会加载所有父应用程序。不是 active 什么时候需要匹配而不是部分匹配?

另一个问题,如何像 single-spa-inspector 一样强制加载应用程序

谢谢你调查它

标签: single-spasingle-spa-angular

解决方案


是的,有一个解决方法。

当您将字符串传递给 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
});


推荐阅读