美文网首页
Angular2 之 属性型指令

Angular2 之 属性型指令

作者: 贺贺v5 | 来源:发表于2016-12-16 09:19 被阅读418次

入手方式:

  • 需求 -- 先要弄清楚我们做什么?
  • 被使用方式 -- 长什么样子?什么场景被使用?怎么被使用?
  • 将每个特性写成单元测试,然后写代码,将这个单元的代码测试通过后,再进行下一个特性代码的单元测试。

绑定宿主元素的事件,事件绑定的时候捕捉到这个事件源$event(table指令,这是属性型指令的重点)。

Angular指令可分为三种

  • 组件
  • 属性型指令
  • 结构型指令

今天来学习一下属性型指令。
属性型指令把行为添加到<u>现有元素上。</u>
属性型指令用于改变一个 DOM 元素的外观或行为。

创建一个属性型指令 -- 初级应用

自己创建属性型指令的必要条件:

import { Directive, ElementRef, Input, Renderer } from '@angular/core';
@Directive({ selector: '[myHighlight]' })
export class HighlightDirective {
    constructor(el: ElementRef, renderer: Renderer) {
       renderer.setElementStyle(el.nativeElement, 'backgroundColor', 'yellow');
    }
}
  • import语句指定了从 Angular 的core库导入的一些符号。

    • Directive提供@Directive装饰器功能。
    • ElementRef注入到指令构造函数中。 这样代码可以访问 DOM 元素。
    • Input将数据从绑定表达式传达到指令中。
    • Renderer让代码可以改变 DOM 元素的样式。
  • @Directive装饰器需要一个 CSS 选择器(属性名称加方括号-[attr]),以便从模板中识别出关联到这个指令的 HTML。
    指令的选择器是[myHighlight],Angular 将会在模板中找到所有带myHighlight属性的元素。

  • **ElementRef是一个服务,它赋予我们通过它的nativeElement属性直接访问 DOM 元素的能力。 **

  • Renderer服务允许通过代码设置元素的样式。

  • 别忘了把这个指令添加到 NgModule 元数据的declarations数组中。

响应用户引发的事件 -- 高级应用

需求
鼠标悬浮一个元素时,显示字的背景颜色。

  • 检测用户的鼠标何时进入和离开这个元素。
  • 通过设置和清除高亮色来响应这些操作。

实现
把@HostListener装饰应用到事件触发时需调用的方法。

/**
 * 参数1:DOM事件的名字
 * 参数2:注入的事件,常用的是$event
 */
@HostListener('click', ['$event']) onclick(event: MouseEvent) {}

@HostListener('mouseenter') onMouseEnter() {
/* . . . */
}

@HostListener('mouseleave') onMouseLeave() {
/* . . . */
}
  • @HostListener装饰器引用属性型指令的宿主元素,在这个例子中就是<p>。

  • 直接操纵 DOM 元素的方式给宿主 DOM 元素附加一个事件监听器。
    <u>注意:正确的书写监听器,并且还要在指令被销毁的时候,必须卸掉监听器,不然会造成内存泄漏。</u>

  • 使用数据绑定向指令传递值,在定义这个属性的时候,我们调用了@Input()装饰器。

@Input('myHighlight') highlightColor: string;  // 属性 
<p [myHighlight]="color">Highlight me!</p> // 页面

相关文章

  • Angular2 之 属性型指令

    入手方式: 需求 -- 先要弄清楚我们做什么? 被使用方式 -- 长什么样子?什么场景被使用?怎么被使用? 将每个...

  • 【Angular2】的Directive

    Angular2的指令有以下3种 组件 属性指令 结构指令 组件是带有模板的真正指令,它是这三种指令中最常见的也是...

  • angular4 学习第二天(内置指令)

    一、angular 内置指令学习(一) 属性型指令属性型指令会监听和修改其它HTML元素或组件的行为、元素属性(A...

  • Angular自定义指令

    我们知道angular指令分为结构型和属性型2种,今天就来研究一下自定义属性型指令。 上面我们定义了一个指令,如何...

  • angular内置指令相关知识

    大纲 1、angular指令的分类2、angular指令之——组件3、angular指令之——属性指令 (ngSt...

  • 04Angular属性型指令

    指令的分类 组件(带模板的指令)结构型指令(改变宿主文档结构)属性型指令(改变宿主行为) 内置指令 结构型指令(改...

  • 《高效能人士的七个习惯》184——187页

    这几页讲的是习惯三之——“指令型授权和责任型授权”。 一、指令型授权 指令型授权是让别人“去做这个,去做那个,做完...

  • angular自定义指令相关知识及代码

    大纲 1、自定义指令之——属性指令2、自定义属性指令的运行原理3、自定义属性指令代码实践4、自定义结构指令5、自定...

  • 指令

    分类 组件:带有模版的指令 属性型指令:更改元素、组件或其他指令的外观或行为的指令。 结构型指令:通过添加和删除 ...

  • 2019-04-24

    结构型指令和属性型指令。 Angular 本身定义了一系列这两种类型的指令,你也可以使用 @Directive()...

网友评论

      本文标题:Angular2 之 属性型指令

      本文链接:https://www.haomeiwen.com/subject/emkimttx.html