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

基础知识
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 中内置指令的基本用法
# 内嵌
# 我们可以
# 绑定
# 自定义
# 可以使用
# 的是
# 是一个
# 有什么
# 多个
# 我有
# 三种
# 或删除
# 可选
# 第二节
# 第三节
# 可通过
# 后会
# 并能
# 第四节
# 有什么关系
相关文章:
网站制作话术技巧,网站推广做的好怎么话术?
如何在Windows 2008云服务器安全搭建网站?
广州营销型建站服务商推荐:技术优势与SEO优化解析
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
实例解析angularjs的filter过滤器
外贸公司网站制作,外贸网站建设一般有哪些步骤?
代刷网站制作软件,别人代刷火车票靠谱吗?
简单实现Android文件上传
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
,有什么在线背英语单词效率比较高的网站?
如何在阿里云域名上完成建站全流程?
建站主机选哪种环境更利于SEO优化?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
简单实现Android验证码
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
建站之星CMS五站合一模板配置与SEO优化指南
如何快速搭建响应式可视化网站?
如何通过WDCP绑定主域名及创建子域名站点?
如何在服务器上配置二级域名建站?
如何选择美橙互联多站合一建站方案?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
如何快速选择适合个人网站的云服务器配置?
,怎么在广州志愿者网站注册?
长沙企业网站制作哪家好,长沙水业集团官方网站?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
如何在阿里云通过域名搭建网站?
建站主机选购指南:核心配置与性价比推荐解析
如何批量查询域名的建站时间记录?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
免费网站制作appp,免费制作app哪个平台好?
如何通过虚拟机搭建网站?详细步骤解析
潮流网站制作头像软件下载,适合母子的网名有哪些?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
建站主机选购指南:核心配置优化与品牌推荐方案
大学网站设计制作软件有哪些,如何将网站制作成自己app?
建站之星安装提示数据库无法连接如何解决?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
如何在IIS服务器上快速部署高效网站?
独立制作一个网站多少钱,建立网站需要花多少钱?
如何通过虚拟主机快速搭建个人网站?
如何快速搭建高效WAP手机网站?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
如何在企业微信快速生成手机电脑官网?
,交易猫的商品怎么发布到网站上去?
如何通过VPS搭建网站快速盈利?
建站主机类型有哪些?如何正确选型
*请认真填写需求信息,我们会在24小时内与您取得联系。