本系列教程的开发环境及开发语言:

基础知识
Angular CLI 基本使用
安装 Angular CLI (可选)
npm install -g @angular/cli
创建新的项目
ng new PROJECT-NAME
启动本地服务器
cd PROJECT-NAME ng serve
Angular 指令简介
Angular 的指令分为三种:
Angular 指令分类图
Angular 组件组成图
第一节 - 创建指令
在 Angular 中,我们可以使用 HostBinding 装饰器,实现元素的属性绑定。
指令的作用
该指令用于演示如何利用 HostBinding 装饰器,设置元素的 innerText 属性。
指令的实现
import { Directive, HostBinding} from '@angular/core';
@Directive({
selector: '[greet]'
})
export class GreetDirective {
@HostBinding() innerText = 'Hello, Everyone!';
}
指令的应用
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<h2>Hello, Angular</h2>
<h2 greet>Hello, Angular</h2>
`,
})
export class AppComponent { }
第二节 - 定义输入属性
为了能够让用户自定义 GreetDirective 指令的问候内容,我们需要使用 Input 装饰器去定义指令的输入属性。
指令的作用
该指令用于演示如何利用 Input 装饰器,定义指令的输入属性,从而实现让用户自定义问候内容。
指令的实现
import { Directive, HostBinding, Input } from '@angular/core';
@Directive({
selector: '[greet]'
})
export class GreetDirective {
@Input() greet: string;
@HostBinding() get innerText() {
return this.greet;
}
}
指令的应用
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<h2>Hello, Angular</h2>
<h2 [greet]="'Hello, Semlinker!'">Hello, Angular</h2>
`,
})
export class AppComponent { }
第三节 - 事件处理
在 Angular 中,我们可以使用 HostListener 属性装饰器,实现元素的事件绑定。
指令的作用
该指令用于演示如何利用 HostListener 装饰器,监听用户的点击事件。
指令的实现
import { Directive, HostBinding, HostListener, Input } from '@angular/core';
@Directive({
selector: '[greet]'
})
export class GreetDirective {
@Input() greet: string;
@HostBinding() get innerText() {
return this.greet;
}
@HostListener('click',['$event'])
onClick(event) {
this.greet = 'Clicked!';
}
}
指令的应用
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<h2>Hello, Angular</h2>
<h2 [greet]="'Hello, Semlinker!'">Hello, Angular</h2>
`,
})
export class AppComponent { }
第四节 - 获取宿主元素属性值
在 Angular 中,我们可以通过 Attribute 装饰器来获取指令宿主元素的属性值。
指令的作用
该指令用于演示如何利用 Attribute 装饰器,获取指令宿主元素上的自定义属性 author 的值。
指令的实现
import { Directive, HostBinding, HostListener, Input, Attribute } from '@angular/core';
@Directive({
selector: '[greet]'
})
export class GreetDirective {
@Input() greet: string;
@HostBinding() get innerText() {
return this.greet;
}
@HostListener('click',['$event'])
onClick(event) {
this.greet = 'Clicked!';
console.dir(event);
}
constructor(@Attribute('author') public author: string) {
console.log(author);
}
}
指令的应用
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<h2>Hello, Angular</h2>
<h2 [greet]="'Hello, Semlinker!'"
author="semlinker">Hello, Angular</h2>
`,
})
export class AppComponent { }
第五节 - 使用 <ng-template> 元素
在 Angular 中,我们可以通过 ViewChild 装饰器来获取视图中定义的模板元素,然后利用 ViewContainerRef 对象的 createEmbeddedView() 方法,创建内嵌视图。
import { Component, TemplateRef, ViewContainerRef, ViewChild,
AfterViewInit } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<ng-template #tpl>
Hello, Semlinker!
</ng-template>
`,
})
export class AppComponent implements AfterViewInit{
@ViewChild('tpl')
tplRef: TemplateRef<any>;
constructor(private vcRef: ViewContainerRef) {}
ngAfterViewInit() {
this.vcRef.createEmbeddedView(this.tplRef);
}
}
第六节 - 使用 ngTemplateOutlet 指令
ngTemplateOutlet 的作用
该指令用于基于已有的 TemplateRef 对象,插入对应的内嵌视图。在应用 NgTemplateOutlet 指令时,我们可以通过 [ngTemplateOutletContext] 属性来设置 EmbeddedViewRef 的上下文对象。绑定的上下文应该是一个对象,此外可通过 let语法来声明绑定上下文对象属性名。
ngTemplateOutlet 的使用
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<ng-template #stpl>
Hello, Semlinker!
</ng-template>
<ng-template #atpl>
Hello, Angular!
</ng-template>
<div [ngTemplateOutlet]="atpl"></div>
<div [ngTemplateOutlet]="stpl"></div>
`,
})
export class AppComponent { }
ngOutletContext 的使用
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<ng-template #stpl let-message="message">
<p>{{message}}</p>
</ng-template>
<ng-template #atpl let-msg="message">
<p>{{msg}}</p>
</ng-template>
<ng-template #otpl let-msg>
<p>{{msg}}</p>
</ng-template>
<div [ngTemplateOutlet]="atpl"
[ngOutletContext]="context">
</div>
<div [ngTemplateOutlet]="stpl"
[ngOutletContext]="context">
</div>
<div [ngTemplateOutlet]="otpl"
[ngOutletContext]="context">
</div>
`,
})
export class AppComponent {
context = { message: 'Hello ngOutletContext!',
$implicit: 'Hello, Semlinker!' };
}
第七节 - 创建结构指令
指令的功能
该指令实现 ngIf 指令相反的效果,当指令的输入条件为 Falsy 值时,显示DOM元素。
指令的实现
import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';
@Directive({
selector: '[exeUnless]'
})
export class UnlessDirective {
@Input('exeUnless')
set condition(newCondition: boolean) {
if (!newCondition) {
this.viewContainer.createEmbeddedView(this.templateRef);
} else {
this.viewContainer.clear();
}
}
constructor(private templateRef: TemplateRef<any>,
private viewContainer: ViewContainerRef) {
}
}
指令的应用
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<h2 *exeUnless="condition">Hello, Semlinker!</h2>
`,
})
export class AppComponent {
condition: boolean = false;
}
我有话说
Angular 中指令与组件有什么关系?
组件继承于指令,并扩展了与 UI 视图相关的属性,如 template、styles、animations、encapsulation 等。
结构指令中的 TemplateRef 与 ViewContainerRef 有什么作用?
TemplateRef:用于表示内嵌的 template 模板元素,通过 TemplateRef 实例,我们可以方便创建内嵌视图(Embedded Views),且可以轻松地访问到通过 ElementRef 封装后的 nativeElement。需要注意的是组件视图中的 template 模板元素,经过渲染后会被替换成 comment 元素。
ViewContainerRef:用于表示一个视图容器,可添加一个或多个视图。通ViewContainerRef 实例,我们可以基于 TemplateRef 实例创建内嵌视图,并能指定内嵌视图的插入位置,也可以方便对视图容器中已有的视图进行管理。简而言之,ViewContainerRef 的主要作用是创建和管理内嵌视图或组件视图。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Angular4
# 指令
# angularjs
# angular
# Angular4 中常用的指令入门总结
# Angular4 中内置指令的基本用法
# 内嵌
# 我们可以
# 绑定
# 自定义
# 可以使用
# 的是
# 是一个
# 有什么
# 多个
# 我有
# 三种
# 或删除
# 可选
# 第二节
# 第三节
# 可通过
# 后会
# 并能
# 第四节
# 有什么关系
相关文章:
魔方云NAT建站如何实现端口转发?
活动邀请函制作网站有哪些,活动邀请函文案?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
建站主机数据库如何配置才能提升网站性能?
如何零基础在云服务器搭建WordPress站点?
如何实现建站之星域名转发设置?
,网站推广常用方法?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
IOS倒计时设置UIButton标题title的抖动问题
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
深入理解Android中的xmlns:tools属性
昆明高端网站制作公司,昆明公租房申请网上登录入口?
如何通过网站建站时间优化SEO与用户体验?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
如何在阿里云购买域名并搭建网站?
表情包在线制作网站免费,表情包怎么弄?
如何访问已购建站主机并解决登录问题?
如何通过免费商城建站系统源码自定义网站主题与功能?
建站之星备案是否影响网站上线时间?
如何基于PHP生成高效IDC网络公司建站源码?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
网页设计与网站制作内容,怎样注册网站?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
个人摄影网站制作流程,摄影爱好者都去什么网站?
潮流网站制作头像软件下载,适合母子的网名有哪些?
,如何利用word制作宣传手册?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
如何在IIS7中新建站点?详细步骤解析
怎么将XML数据可视化 D3.js加载XML
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
Android自定义控件实现温度旋转按钮效果
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
,制作一个手机app网站要多少钱?
如何做网站制作流程,*游戏网站怎么搭建?
*服务器网站为何频现安全漏洞?
如何通过虚拟主机空间快速建站?
高防服务器:AI智能防御DDoS攻击与数据安全保障
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
已有域名和空间,如何快速搭建网站?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
如何在腾讯云免费申请建站?
建站org新手必看:2024最新搭建流程与模板选择技巧
网站制作软件免费下载安装,有哪些免费下载的软件网站?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
智能起名网站制作软件有哪些,制作logo的软件?
C++中引用和指针有什么区别?(代码说明)
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
实例解析angularjs的filter过滤器
*请认真填写需求信息,我们会在24小时内与您取得联系。