首页 > 解决方案 > Angular 10 到 12 更新导致错误 Uncaught RangeError: Wrong length

问题描述

我刚刚将我的 Angular 应用程序从版本 10 升级到版本 12,当我运行“ng serve”时没有构建错误,但是在控制台中它给了我错误“未捕获的 RangeError:错误的长度!” 来自 _typed-buffer.js:157。在堆栈跟踪中,底部有 app-routing.module.ts:104 和 auth-guard.service.ts:12。我不知道如何克服这个错误。因此,没有任何应用程序加载。在 auth-guard.service.ts 第 12 行有

@Injectable()
export class AuthGuardService implements CanActivate {

constructor(private authService: AuthService, private router: Router, private location: Location) {}

我尝试更新到最新的节点和 npm 版本 14.17.0 和 7.13.0。我已经尝试过 ng update 并更新我所有的包。只是似乎无法克服这个错误。当我在谷歌上搜索这个错误和 Angular 12 时,并没有太多内容。有人遇到过这个问题吗?

标签: javascriptangularweb

解决方案


根据文档,从 angular 10 迁移到 angular 12 有一些变化与路由器有关,您可能需要手动解决

如果您使用路由器,relativeLinkResolution 的默认值已从旧版更改为更正版。如果您的应用程序以前通过未在 ExtraOptions 中指定值来使用默认值,并且在从空路径路由的子节点导航时使用相对链接,则您需要更新 RouterModule 的配置以专门为relativeLinkResolution指定 legacy 。有关更多详细信息,请参阅文档。

RouterLinkActive 的 routerLinkActiveOptions 属性现在具有更具体的类型。您可能需要更新访问此属性的代码以与更改保持一致。

在 Angular 路由器中,在 v4 中不推荐使用的用于 initialNavigation 的选项已被删除。如果您之前使用了 enabled 或 true,现在选择 enabledNonBlocking 或 enabledBlocking。

如果您以前使用 false 或 legacy_disabled,现在使用 disabled。在 Angular 路由器的 routerLink 中,preserveQueryParams 已被删除,请改用 queryParamsHandling="preserve"。

如果您正在访问 queryParams、fragment 或 queryParamsHandling 的 routerLink 值,您可能需要放宽输入以接受 undefined 和 null

在这里探索更多可能的事情


推荐阅读