angular自定义属性指令
在angular中有三种类型的指令:
- 组件–拥有模板的指令;
- 结构性指令–通过添加和移除DOM元素改变DOM布局的指令;
- 属性型指令–改变元素、组件或其他指令的外观和行为的指令;
组件是这三种指令中最常用的。结构性指令修改视图的结构,例如ngfor和ngif。属性型指令改变一个元素的外观或行为。
属性型指令至少需要一个带有 @Directive 装饰器的控制器类。该装饰器指定了一个用于标识属性的选择器。 控制器类实现了指令需要的指令行为。
比如定义一个名为“highlight”的属性型指令:
在cmd的命令窗口里面执行命令:ng generate directive highlight
生成的 src/app/highlight.directive.ts 文件如下:

import { Directive } from '@angular/core';
@Directive({
selector: '[appHighlight]'
})
export class HighlightDirective {
constructor() { }
}
这里导入的 Directive 符号提供了 Angular 的 @Directive 装饰器。
@Directive 装饰器的配置属性中指定了该指令的 CSS 属性型选择器 [appHighlight]
这里的方括号([])表示它的属性型选择器。 Angular 会在模板中定位每个拥有名叫 appHighlight 属性的元素,并且为这些元素加上本指令的逻辑。
正因如此,这类指令被称为 属性选择器 。
在构造函数里加相关逻辑,比如,实现把宿主元素的背景色设置为黄色:

import { Directive, ElementRef } from '@angular/core';
@Directive({
selector: '[appHighlight]'
})
export class HighlightDirective {
constructor(el: ElementRef) {
el.nativeElement.style.backgroundColor = 'yellow';
}
}
import 语句还从 Angular 的 core 库中导入了一个 ElementRef 符号。
你可以在指令的构造函数中使用 ElementRef 来注入宿主 DOM 元素的引用,也就是你放置 appHighlight 的那个元素。
ElementRef 通过其 nativeElement 属性给你了直接访问宿主 DOM 元素的能力。
这里的第一个实现把宿主元素的背景色设置为了黄色。
使用属性型指令:
<p appHighlight>Highlight me!</p>
总结:Angular 在宿主元素 p 上发现了一个 appHighlight 属性。 然后它创建了一个 HighlightDirective 类的实例,并把所在元素的引用注入到了指令的构造函数中。 在构造函数中,该指令把 p 元素的背景设置为了黄色。
以上只是简单的设置元素的颜色,如果需要鼠标悬浮一个元素时,设置它的颜色,响应用户引发的事件:
先把 HostListener 加进导入列表中。
src/app/highlight.directive.ts (imports):
import { Directive, ElementRef, HostListener } from '@angular/core';
然后使用 HostListener 装饰器添加两个事件处理器,它们会在鼠标进入或离开时进行响应。
src/app/highlight.directive.ts (mouse-methods):

@HostListener('mouseenter') onMouseEnter() {
this.highlight('yellow');
}
@HostListener('mouseleave') onMouseLeave() {
this.highlight(null);
}
private highlight(color: string) {
this.el.nativeElement.style.backgroundColor = color;
}
这个辅助方法(highlight)被从构造函数中提取了出来。 修改后的构造函数只负责声明要注入的元素 el: ElementRef。
src/app/highlight.directive.ts (constructor):
constructor(private el: ElementRef) { }
下面是修改后的指令代码:

import { Directive, ElementRef, HostListener } from '@angular/core';
@Directive({
selector: '[appHighlight]'
})
export class HighlightDirective {
constructor(private el: ElementRef) { }
@HostListener('mouseenter') onMouseEnter() {
this.highlight('yellow');
}
@HostListener('mouseleave') onMouseLeave() {
this.highlight(null);
}
private highlight(color: string) {
this.el.nativeElement.style.backgroundColor = color;
}
}
angular自定义属性指令的更多相关文章
- Angular17 Angular自定义指令
1 什么是HTML HTML文档就是一个纯文本文件,该文件包含了HTML元素.CSS样式以及JavaScript代码:HTML元素是由标签呈现,浏览器会为每个标签创建带有属性的DOM对象,浏览器通过渲 ...
- angular自定义指令相关知识及代码
原文地址 https://www.jianshu.com/p/0c015862156d 大纲 1.自定义指令之——属性指令 2.自定义属性指令的运行原理 3.自定义属性指令代码实践 4.自定义结构指令 ...
- Angular自定义指令(directive)
angular自定义指令,意我们可以通过angula自己定义指令,来实现我们的特殊要求,为所欲为,一支穿云箭,千军万马来相见 多少年的老规矩了,先看代码: <!DOCTYPE html> ...
- angular 自定义指令详解 Directive
在angular中,Directive,自定义指令的学习,可以更好的理解angular指令的原理,当angular的指令不能满足你的需求的时候,嘿嘿,你就可以来看看这篇文章,自定义自己的指令,可以满足 ...
- Angular:自定义属性指令
①在命令行窗口下用 CLI 命令ng g directive创建指令类文件 ②将directives/light.directive.ts文件改造一番 import { Directive, Elem ...
- Angular学习-指令入门
1.指令的定义 从用户的角度来看,指令就是在应用的模板中使用的自定义HTML标签.指令可以很简单,也可以很复杂.AngularJS的HTML编译器会解析指令,增强模板的功能.也是组件化未来的发展趋势, ...
- angular 自定义指令 directive transclude 理解
项目中断断续续的用了下angular,也没狠下心 认真的学习.angular 特别是自定义指令这块 空白. transclude 定义是否将当前元素的内容转移到模板中.看解释有点抽象. 看解释有点抽象 ...
- Angular自定义指令directive:scope属性
在AngularJS中,除了内置指令如ng-click等,我们还可以自定义指令.自定义指令,是为了扩展DOM元素的功能.代码中,通过指定directive中的restrict属性,来决定这个指令是作为 ...
- angular directive指令的复用
“指令之之所以要定义成指令就是为了复用!” 指令一定是可以用在不同的controller里面的,为了在不同的controller去使用它,我们一定要给指定的配置项一个指令.这样才能跟外面的控制器进行交 ...
- angular js 指令的数据传递 及作用域数据绑定
<div my-directive my-url="http://google.com" my-link-text="Click me to go to Googl ...
随机推荐
- JDK14性能管理工具:jstat使用介绍
目录 简介 JStat命令 JStat Output Options class compiler gc gccapacity gcnew gcnewcapacity gcold gcoldcapac ...
- JVM—对象的创建流程与内存分配
JVM-对象的创建流程与内存分配 创建流程 对象创建的流程图如下: 对象的内存分配方式 内存分配的方式有两种: 指针碰撞(Bump the Pointer) 空闲列表(Free List) 分配方式 ...
- Numpy结构化数组
Numpy结构化数组 Numpy的结构化数组和记录数组为复合的.异构的的数据提供了非常有效的存储. 结构化数组 In [1]: import numpy as np In [2]: name = [' ...
- Unity-PC 端调用SpVoice语音 (文字转语音)
第一步引用文件 在VS当中 点击项目->添加引用-> 搜索Microsoft Speech Objecet Library 然后选中前面的白色方块点击确定就行了 插入之后 你的引用库中会多 ...
- 【中秋国庆不断更】HarmonyOS对通知类消息的管理与发布通知(下)
[中秋国庆不断更]HarmonyOS对通知类消息的管理与发布通知(下) 一.发布进度条类型通知 进度条通知也是常见的通知类型,主要应用于文件下载.事务处理进度显示.HarmonyOS提供了进度条模板, ...
- HarmonyOS 管理页面跳转及浏览记录导航
历史记录导航 使用者在前端页面点击网页中的链接时,Web组件默认会自动打开并加载目标网址.当前端页面替换为新的加载链接时,会自动记录已经访问的网页地址.可以通过forward()和backward ...
- sm加密前端解析--JS实现国密算法SM2加密
https://gitee.com/houxianzhou/sm2-demo.git 具体相关算法这里不在讲述,网上文章很多,也可以看我之前 iOS-sm2-sm3-sm4-sm9-zuc 里面提供的 ...
- python异步字符串查找,asyncio和marisa_trie
自然语言处理当中经常需要字符串的查找操作,比如通过查找返回字串在文本当中的位置,比如通过匹配实现的ner import pandas as pd import asyncio # data = pd. ...
- stm32串口晶振不对输出乱码+汇承HC-14lora模块
最近要用到一个lora无线透传模块,然后就先用两个32开发板(用的STM32F103C8T6)试试简单的收发数据.结果,第一步串口发送一句话就寄了,我串口打印了"hi",结果出现了 ...
- 力扣227(java)-基本计算器Ⅱ(中等)
题目: 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值. 整数除法仅保留整数部分. 你可以假设给定的表达式总是有效的.所有中间结果将在 [-231, 231 - 1] 的范围内. ...