Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Angular Title Service 详解

Angular Title Service 详解

作者头像
阿宝哥
发布于 2019-11-05 07:50:45
发布于 2019-11-05 07:50:45
2.1K00
代码可运行
举报
文章被收录于专栏:全栈修仙之路全栈修仙之路
运行总次数:0
代码可运行

Title Service 简介

Angular Title Service 用于获取和设置当前 HTML 文档的标题。Title Service 提供了以下方法:

首先要使用 Title 服务,我们需要从 @angular/platform-browser 库导入 Title 类,然后利用 Angular 依赖注入的机制,通过构造注入的方式注入 Title 服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { Component, OnInit } from "@angular/core";
import { Title } from "@angular/platform-browser";

@Component({
  selector: "app-root",
  template: `
    <h3>Angular Title Service</h3>
`
})
export class AppComponent {
  constructor(public title: Title) {}
}
setTitle()

setTitle(newTitle: string)

该方法用于设置当前 HTML 文档的标题,它接收一个参数:

  • newTitle:标题文本
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
setTitle() {
  this.title.setTitle("前端修仙之路");
}
getTitle()

getTitle(): string

该方法用于获取当前 HTML 文档的标题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
getTitle() {
  console.log(this.title.getTitle());
}

Title Service API 很简单,以下是完整的示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { Component, OnInit } from "@angular/core";
import { Title } from "@angular/platform-browser";

@Component({
  selector: "app-root",
  template: `
    <h3>Angular Title Service</h3>
    <button (click)="setTitle()">Set Page Title</button>
    <button (click)="getTitle()">Get Page Title</button>
`
})
export class AppComponent {
  constructor(public title: Title) {}

  setTitle() {
    this.title.setTitle("前端修仙之路");
  }

  getTitle() {
    console.log(this.title.getTitle());
  }
}

Title Service 实战

在 SPA 单页应用的开发过程中,经常需要根据不同的路由显示不同的标题,即动态地设置页面的标题。针对这种需求,我们可以通过订阅路由事件,然后在页面导航成功后,利用 Title 服务动态设置页面的标题或 Meta 信息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.router.events.subscribe((event: any) => {
      if (event instanceof NavigationEnd) {
        switch (event.urlAfterRedirects) {
          case '/':
            this.meta.updateTag({
              name: 'description',
              content: 'Angular Example app with Angular CLI, Angular Material and more'
            });
            break;
          case '/' + AppConfig.routes.heroes: // routes: { heroes: 'heroes' },
            this.title.setTitle('Heroes list');
            this.meta.updateTag({
              name: 'description',
              content: 'List of super-heroes'
            });
            break;
        }
      }
});

示例来源于 —— angular6-example-app ,该示例主要介绍了如何利用路由事件来动态设置页面的标题。而实际的开发过程中,我们会在定义路由时,为需要设置标题的路由,定义一个 data 属性,然后设置该属性对应的属性值为一个包含 title 属性的对象,比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const routes: Routes = [
    {
        path: '',
        component: HomeComponent,
        data: { title: "My Home Page" },
    }, 
    {
        path: 'detail/:id',
        component: DetailComponent,
    }
];

之后,我们只要在激活当前页面的时候,获取对应的路由配置,就可以利用 Title 服务来改变当前页面的标题。此外在实际的开发中,可能会遇到一些复杂的场景,比如子路由、多层嵌套路由等。针对这种情形,建议有需要的同学认真阅读一下 Todd Motto 大神 dynamic-page-titles-angular-2-router-events 这篇文章,虽然使用的是 Angular 2.x 版本,但核心的思想是一致的,大家只需根据当前使用的 Angular 版本进行相应的代码更新。

Title Service 源码简析

Title 类及构造函数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Injectable({providedIn: 'root', useFactory: createTitle, deps: []})
export class Title {
  constructor(@Inject(DOCUMENT) private _doc: any) {}
}

通过观察 Injectable 装饰器的 Meta 元信息,我们知道 Meta 服务将被注册在根级注入器中,当首次获取 Title 服务时,将使用 createTitle() 工厂方法创建对应的实例。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {Inject, Injectable, inject} from '@angular/core';

export function createTitle() {
  return new Title(inject(DOCUMENT));
}
setTitle()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
setTitle(newTitle: string) { 
  getDOM().setTitle(this._doc, newTitle); 
}

以上代码通过调用 getDOM() 方法获取 DomAdapter 对象,然后调用该对象的 setTitle() 方法设置当前页面的标题。

getTitle()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
getTitle(): string { 
  return getDOM().getTitle(this._doc); 
}

参考资源

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/09/02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Angular 6.x 基础教程
若想进一步了解 Angular CLI 的详细信息,请参考 Angular CLI 终极指南。
阿宝哥
2019/11/05
15.9K0
Angular Meta Service 详解
Metadata 中文名叫元数据,是用于描述数据的数据。它不会显示在页面上,但是机器却可以识别。meta 常用于定义页面的说明,关键字,最后修改日期,和其它的元数据。这些元数据将服务于浏览器,搜索引擎和其它网络服务。
阿宝哥
2019/11/05
1.3K0
Angular 工具篇之国际化处理
在日常开发过程中,某些项目会要求支持国际化。对于使用 Angular 框架的项目来说,我们可以利用以下第三方库,快速支持国际化:
阿宝哥
2019/11/05
2.1K0
angular工程目录结构说明
世间万物皆对象
2024/03/20
1620
Angular 从入坑到挖坑 - Router 路由使用入门指北
Angular 入坑记录的笔记第五篇,因为一直在加班的缘故拖了有一个多月,主要是介绍在 Angular 中如何配置路由,完成重定向以及参数传递。至于路由守卫、路由懒加载等“高级”特性,并不会在本篇文章中呈现
程序员宇说
2020/05/19
4.4K0
angular2关于自动获取配置路由里面titile的值《路由跳转,页面title变化》
import {Component, OnInit} from '@angular/core'; import {Router, NavigationEnd, ActivatedRoute} from '@angular/router'; import {Title} from '@angular/platform-browser'; import 'rxjs/add/operator/filter'; import 'rxjs/add/operator/map'; import 'rxjs/add/op
用户1437675
2018/08/20
8700
ionic4初级教程-含登录、访问权限验证功能
如果第一次安装的时候失败,没关系 删掉已经生成的ioinc4Learn文件包,重新运行命令
lilugirl
2019/05/28
2.5K0
ionic4初级教程-含登录、访问权限验证功能
angular 入门1
ng new helloworld --skip-install 然后使用 cnpm install 或者yarn install加速
路过君
2020/06/19
8730
Angular JSONP 详解
JSONP(JSON with Padding)是数据格式JSON的一种 “使用模式”,可以让网页从别的网域要数据。另一个解决这个问题的新方法是跨来源资源共享。
阿宝哥
2019/11/05
2.4K0
Angular 路由配置(预加载配置,懒加载配置)
(1)RouterModule对象提供了两个静态的方法:forRoot()和forChild()来配置路由信息。
玖柒的小窝
2021/11/04
3.3K0
Angular学习(01)-架构概览
官方的教程,其实已经很详细且易懂,这里再次梳理的目的在于复习和巩固相关知识点,刚开始接触学习 Angular 的还是建议以官网为主。
请叫我大苏
2019/03/19
3.9K0
Angular学习(01)-架构概览
Angular Provider 作用域
Services 是每个 Angular 应用程序的基本块之一。Service 是一个普通的 TypeScript 类,它也可以没有使用 @Injectable 装饰器。 比如下面是我们定义一个 UserService 类:
阿宝哥
2019/11/05
1.8K0
Angular开发实践(六):服务端渲染
Angular Universal Angular在服务端渲染方面提供一套前后端同构解决方案,它就是 Angular Universal(统一平台),一项在服务端运行 Angular 应用的技术。 标准的 Angular 应用会执行在浏览器中,它会在 DOM 中渲染页面,以响应用户的操作。 而 Angular Universal 会在服务端通过一个被称为服务端渲染(server-side rendering - SSR)的过程生成静态的应用页面。 它可以生成这些页面,并在浏览器请求时直接用它们给出响应。 它
laixiangran
2018/04/11
4.9K0
Angular开发实践(六):服务端渲染
一个Angular 5教程:一步一步指导实现你的第一个Angular 5应用程序
现在我们可以app.component.html用这个替换:Angular是由Google开发的AngularJS框架的新版本。它带有一个完整的重写,以及各种改进,包括优化构建和更快的编译时间。在这个Angular 5教程中,我们将从头开始构建一个笔记应用程序。如果您一直在等待学习Angular 5,本教程适合您。
WindCoder
2018/09/19
43.3K0
一个Angular 5教程:一步一步指导实现你的第一个Angular 5应用程序
Angular 应用是怎么工作的?
Angular 应用的启动基于 angular.json 文件。这个不是应用的入口文件,而是应用的启动文件。
Jimmy_is_jimmy
2022/04/15
1.5K0
Angular 应用是怎么工作的?
Angular快速学习笔记(3) -- 组件与模板
1. 显示数据 在 Angular 中最典型的数据显示方式,就是把 HTML 模板中的控件绑定到 Angular 组件的属性。 使用插值表达式显示组件属性 要显示组件的属性,最简单的方式就是通过插值表达式 (interpolation) 来绑定属性名。 要使用插值表达式,就把属性名包裹在双花括号里放进视图模板,如 {{myHero}}。 import { Component } from '@angular/core'; @Component({ selector: 'app-root', te
JadePeng
2018/05/28
15.5K0
AngularDart4.0 英雄之旅-教程-07路由 顶
如果该应用程序尚未运行,请启动该应用程序。 在进行更改时,请通过重新加载浏览器窗口来保持运行。
南郭先生
2018/08/14
17.8K0
AngularDart4.0 英雄之旅-教程-07路由
                                                    顶
使用Angular8和百度地图api开发《旅游清单》
本文的目的是通过一步步实现一个旅游清单项目,让大家快速入门Angular8以及百度地图API。我们将收获:
徐小夕
2019/08/09
6.1K1
使用Angular8和百度地图api开发《旅游清单》
Angular 从入坑到挖坑 - 组件食用指南
angular 入坑记录的笔记第二篇,介绍组件中的相关概念,以及如何在 angular 中通过使用组件来完成系统功能的实现
程序员宇说
2020/02/25
16.1K0
Angular 从入坑到挖坑 - 组件食用指南
Angular Library 快速入门
在介绍如何创建 Angular Library 之前,让我们来看一下 Angular 新的配置文件 —— angular.json。早期版本的 angular-cli.json 文件已经被替换为 angular.json 文件,文件的内容也发生了改变。这里我们关心的 projects 属性,它为每个独立的项目提供了一个入口:
阿宝哥
2019/11/05
2.5K0
相关推荐
Angular 6.x 基础教程
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验