如果您定期在Angular中编写应用程序并且花了一百多个小时,那么您很可能知道这些功能。但是,可以肯定的是-请阅读:)在继续介绍Angular的功能之前,值得一提的是一个非常有用的工具。Bit(Github)使在Angular组件上一起工作和共享它们变得容易。我真诚地建议它保持一致的接口,加快开发速度并减少代码中的错误数量。
示例:使用bit.dev的Angular圆形装载机1.标题
title标签是一个HTML元素,用于定义网页的标题。标题作为结果的可单击标题显示在搜索结果页面(SERP)上。它们对于可用性,SEO和社会推广非常重要。网络。Angular应用程序从index.html中的...标签获取标题。默认情况下,Angular中组件之间的过渡不会更改此标头。您知道标题可以与每个组件分开设置吗?Angular中有一个Title服务角度的/平台浏览器。您可以轻松地将其嵌入其他组件中,并使用setTitle方法覆盖标题。import { Title } from "@angular/platform-browser"@Component({
...
})
export class LoginComponent implements OnInit {
constructor(private title: Title) {} ngOnInit() {
title.setTitle("Login")
}
}
导航到应用程序中的LoginComponent时,浏览器窗口的标题将更改为“ Login”。可以在任何组件中执行相同的操作,因此,当您在应用程序内部导航时,标题将更改,以响应用户的操作。2.元
Angular应用程序元标记也来自index.html文件。并从组件设置它们,从角度的/平台浏览器。再说一次:使用元标记在社交网络中的SEO和页面推广方面很有用。网络中,它们包含有关网页的信息,搜索引擎使用该网页来正确排名并在搜索结果中正确显示。要使用meta标签组件,请从角度的/ platform-browser并嵌入所需的组件。import { Meta } from "@angular/platform-browser"@Component({
...
})
export class BlogComponent implements OnInit {
constructor(private meta: Meta) {} ngOnInit() {
meta.updateTag({name: "title", content: ""})
meta.updateTag({name: "description", content: "Lorem ipsum dolor"})
meta.updateTag({name: "image", content: "./assets/blog-image.jpg"})
meta.updateTag({name: "site", content: "My Site"})
}
}
BlogComponent现在可以正确显示在Twitter,Facebook等上。同时以正确易读的形式显示说明,标题和图像。您也听说过吗?然后,这里有一些更有趣的事情。3.覆盖图案插值
模式中的标准插补器为{{}}。如果您在{{和}}之间输入变量,则其值将显示在最终DOM中。您是否知道可以覆盖任何字符上的标准封装分隔符?这很简单。您只需要在组件装饰器的插值属性中指定新值。@Component({
interpolation: ["((","))"]
})
export class AppComponent {}
AppComponent模板中使用的插值已更改为(()),并且{{}}不再有效。@Component({
template: `
<div>
((data))
</div>
`,
interpolation: ["((","))"]
})
export class AppComponent {
data: any = "dataVar"
}
在浏览器中,您将看到将显示字符串“ dataVar”来代替((data))。4.位置
我们可以使用位置服务获取在浏览器中打开的页面的当前URL。根据所使用的LocationStrategy,位置将通过URL中的路径(/ example / page /)或英镑后面的部分(#test / page /)存储。使用“位置”,我们可以转到URL,在故事中前进,返回,更改当前URL或替换故事中的顶部项。CommonModule的位置服务将在这里提供帮助。import { Location } from "@angular/common"@Component({
...
})
export class AppComponent {
constructor(private location: Location) {} navigateTo(url) {
this.location.go(url)
} goBack() {
location.back()
} goForward() {
location.forward()
}
}
5.文件
有时,您需要获取文档模型才能直接从Angular应用程序执行DOM操作。文档仅用于此目的。DOCUMENT是表示主要渲染上下文的DI令牌。在浏览器中,这是一个DOM文档。无论运行时如何,它都提供DOM操作。注意:如果“应用程序”上下文和“渲染”上下文不匹配(例如,在Web Worker中启动应用程序时),则文档在“应用程序上下文”中可能不可用。假设我们有某种HTML元素:<canvas id="canvas"></canvas>
要获取画布HTMLElement,请实现DOCUMENT:@Component({})
export class CanvasElement {
constructor(@Inject(DOCUMENT) _doc: Document) {}
}
使用getElementById()获取HTMLElement画布@Component({})
export class CanvasElement {
constructor(@Inject(DOCUMENT) _doc: Document) {} renderCanvas() {
this._doc.getElementById("canvas")
}
}
警告:小心使用DOCUMENT!与DOM交互直接具有危险性,并增加了XSS的风险。6.装饰器@Attribute
基本上,在Angular应用程序中,它们使用Component,Module和Directive装饰器。但是,还有一个属性装饰器,它使您可以传递静态字符串而不会造成不必要的性能开销,从而绕过更改检查。属性装饰器值仅检查一次。用作装饰器输入项:@Component({
...
})
export class BlogComponent {
constructor(@Attribute("type") private type: string ) {}
}
7. HttpInterceptor
HttpInterceptor是Angular中非常强大的功能,它使您可以拦截HttpRequest请求并进行处理。大多数拦截器会通过调用next.handle(transformedReq)在将出站请求传递到链中的下一个拦截器之前转换出站请求。在极少数情况下,拦截器可以自己完全处理请求,而无需进一步委托链的其余部分。允许这种行为。HttpInterceptor最常用于:要使用此拦截器,您需要创建一个服务并实现HttpInterceptor接口。@Injectable()
export class MockBackendInterceptor implements HttpInterceptor {
constructor() {} intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
...
}
}
将其插入主模块:@NgModule({
...
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: MockBackendInterceptor,
multi: true
}
]
...
})
export class AppModule {}
8. AppInitializer
有时,在启动Angular应用程序时,有必要初始化特定的代码段。例如,加载设置,加载缓存,加载所有配置或执行检查。为此专门创建了AppInitialzer令牌。APP_INITIALIZER:应用程序启动后立即执行的功能。假设我们在启动Angular应用程序时需要运行一些runSettings函数:function runSettingsOnInit() {
...
}
为此,让我们继续进入主AppModule模块,并将其添加到NgModule装饰器提供程序部分:@NgModule({
providers: [
{ provide: APP_INITIALIZER, useFactory: runSettingsOnInit }
]
})
9.引导监听器
与AppInitialzer相似,Angular具有允许您跟踪组件加载的功能。这是APP_BOOTSTRAP_LISTENER。对于每个可下载的组件,将调用此令牌返回的所有回调。在许多情况下,您可以使用此功能来跟踪组件的启动。例如,路由器模块基于路由导航使用它来销毁和创建组件。要使用APP_BOOTSTRAP_LISTENER,您需要使用回调函数将其添加到AppModule的provider部分中:@NgModule({
{
provide: APP_BOOTSTRAP_LISTENER, multi: true,
useExisting: runOnBootstrap
}
...
})
export class AppModule {}
10. NgPlural
多元化是程序员的头疼问题。取决于单数/复数形式的使用,对单词形式进行语法调整的任务不断出现。一些网站为此仅使用结尾。例如:1 component(s) removed
3 component(s) removed
也就是说,读者本人必须理解隐含的数字:)Angular建议使用NgPlural指令以更加文明的方式解决此问题。NgPlural基于数字值添加或删除DOM子分支。对于多元化,这就是您所需要的。要使用此伪指令,必须将[ngPlural]属性设置为元素容器作为开关表达式。具有[ngPluralCase]属性的内部元素将根据指定条件显示:<p [ngPlural]="components">
<ng-template ngPluralCase="=1">1 component removed</ng-template>
<ng-template ngPluralCase=">1">{{components}} components removed </ng-template>
</p>
现在您可以丢弃“(s)”。NgPlural指令将根据含义帮助导出正确的单词形式。总:
1 component removed
5 components removed
