Angular 依赖注入系统里 Injection token APP_BASE_HREF 的使用场景

举报
Jerry Wang 发表于 2024/01/04 15:19:45 2024/01/04
【摘要】 Angular 的依赖注入系统是其核心功能之一,它提供了一种优雅的方式来管理应用中的服务和组件之间的依赖关系。在 Angular 中,我们可以使用各种方式来提供依赖项,而 APP_BASE_HREF 是其中的一个依赖注入标记。APP_BASE_HREF 是一个 Injection token,它在 Angular 的路由系统中扮演了重要的角色。该标记用于设置 Angular 应用的基础 UR...

Angular 的依赖注入系统是其核心功能之一,它提供了一种优雅的方式来管理应用中的服务和组件之间的依赖关系。在 Angular 中,我们可以使用各种方式来提供依赖项,而 APP_BASE_HREF 是其中的一个依赖注入标记。

APP_BASE_HREF 是一个 Injection token,它在 Angular 的路由系统中扮演了重要的角色。该标记用于设置 Angular 应用的基础 URL,即应用在浏览器的地址栏中显示的 URL。这个基础 URL 是路由器在解析和生成 URL 时使用的。当我们使用 HTML5 的 pushState 路由策略时,这个标记尤其重要。因为在这种情况下,我们需要在 <base href="/"> 标签中设置正确的 URL,以便路由器可以正确地解析和生成 URL。如果我们不设置这个标记,那么 Angular 将会使用当前页面的 URL 作为基础 URL。

让我们通过一个例子来看一下如何使用 APP_BASE_HREF。假设我们的 Angular 应用部署在服务器的 /my-app/ 目录下,而不是服务器的根目录。如果我们没有设置 APP_BASE_HREF,那么路由器会将当前页面的 URL(例如 http://localhost/my-app/)作为基础 URL。这将会导致问题,因为路由器在解析和生成 URL 时,会认为所有的 URL 都是相对于 http://localhost/ 的,而不是相对于 http://localhost/my-app/。为了解决这个问题,我们可以在应用的主模块中,提供 APP_BASE_HREF 并设置其值为 /my-app/

以下是如何在 AppModule 中设置 APP_BASE_HREF 的示例代码:

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { APP_BASE_HREF } from '@angular/common';

import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule
  ],
  providers: [
    { provide: APP_BASE_HREF, useValue: '/my-app/' }
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

在这个例子中,我们使用 provide 选项来指定我们要提供的 Injection token,然后使用 useValue 选项来设置这个 Injection token 的值。当 Angular 创建和提供依赖项时,它将使用我们提供的值,而不是默认的值。

总的来说,APP_BASE_HREF 是一个在 Angular 应用中设置基础 URL 的重要工具。它可以帮助我们解决在使用 HTML5 的 pushState 路由策略时可能遇到的 URL 解析和生成问题。如果我们的 Angular 应用不是部署在服务器的根目录下,我们就需要使用这个 Injection token 来设置正确的基础 URL。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。