首页 > 其他分享 >Angular 依赖注入系统里 Injection token APP_BASE_HREF 的使用场景

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

时间:2023-11-16 16:13:29浏览次数:34  
标签:URL APP token BASE Injection HREF Angular

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。

标签:URL,APP,token,BASE,Injection,HREF,Angular
From: https://www.cnblogs.com/sap-jerry/p/17836527.html

相关文章

  • error DatabaseException(disk I/O error (code 1802)) sql 'PRAGMA user_version' ar
    问题描述errorDatabaseException(diskI/Oerror(code1802))sql'PRAGMAuser_version'args[]duringopen,c问题分析错误消息"DatabaseException(diskI/Oerror(code1802))"表示在尝试打开SQLite数据库时发生了磁盘I/O错误。这可能有几种原因:数据库文件路径......
  • uniapp打包Android,出现崩溃Didn't find class "io.dcloud.application.DCloudApplicat
    自己创建的新的Android项目打包的时候一直崩溃,报错:Didn'tfindclass"io.dcloud.application.DCloudApplication"查找之后在app/build.gradle中发现添加multiDexEnabledtruecompileOptions{sourceCompatibilityJavaVersion.VERSION_1_8targetCompatibilityJavaV......
  • uniapp运行启动时候出现 The current application is running in a custom debugging
    突然出现这个,原来是uniapp说的自定义基座,是在app/src/main/assets/data/dcloud_contro.xml中需要修改hbuilder标签中的debug的值,如果为true则会出现标题的提示,如果改为false则不会出现标题提示的弹窗<hbuilderdebug="false"syncDebug="false"><apps><appappid="__UNI__......
  • React Native开发App应用程序有哪些优缺点?
    Hello,各位同学们好,我是咕噜铁蛋!今天呢我和大家讲讲另外一种移动应用开发框架reactnative。在快节奏的市场竞争中,企业和开发者追求同时在不同平台上快速发布应用,而跨平台开发框架正是满足这一需求的理想选择之一。作为Facebook推出的开源跨平台移动应用开发框架,ReactNative自2015......
  • Deploying RDLC files in local mode for ASP.NET applications
    RanintoproblemstryingtodeploymyfirstwebapplicationtouseaSQLServerReportingServicesreport.IcreatedaRDLCfileandboundmyreportviewercontroltoanobjectdatasource.Workedfineonmylocalmachinebutasoftenhappensstoppedwork......
  • uniapp 小程序获取当前经纬度,传递给后端
    //#ifdefMP-WEIXIN//定位方法getUserLocation:function(){var_this=this;wx.getSetting({success:(res)=>{//res.authSetting['scope.userLocati......
  • 基于ABP的AppUser对象扩展
     在ABP中AppUser表的数据字段是有限的,现在有个场景是和老系统用户对接,需要在AppUser表中添加一个UId和IMId字段。本文以AppUser表扩展UId和IMId字段为例进行介绍。一.在Abp默认解决方案Test.Identity.EntityFrameworkCore更改IdentityEfCoreEntityExtensionMappings类,该操作......
  • 微前端 micro-app 传参、通信
    微前端micro-app传参、通信 环境及配置,参考:https://www.cnblogs.com/1285026182YUAN/p/17828681.html 1. 应用传参主应用:<template><divclass="container"><micro-appname="my-app-page1"url="http://localhost:5173/stand&quo......
  • 算法~base64算法理解
    base64Base64是一种用于将二进制数据编码成ASCII字符的编码方式。它主要用于在文字环境中传输或存储二进制数据,如在电子邮件、XML文件、URL参数等。Base64编码不是一种加密算法,而是一种编码方式,其主要作用是将二进制数据转换为文本数据,以便更容易在文本协议中处理。Base64......
  • 82岁老人,6个月自学编程,上架自己开发的App!
    82岁老人,6个月自学编程,上架自己开发的App!核桃编程营 ​关注 大部分人在二三十岁上就死去了,过了这个年龄,他们只是自己的影子。此后的余生则是在模仿自己中度过。日复一日,更机械,更装腔作势地重复有生之年的所思所想,所爱所恨。——罗曼·罗兰而有的人,在人生黄......