1 自定概述

2 自定义指令

  详情参见《揭秘Angular2》

  2.1 属性指令

    》工具代码

  1. <div class="panel panel-primary">
  2. <div class="panel-heading">
  3. <ng-content select=".heading"></ng-content>
  4. </div>
  5. <div class="panel-body">
  6. <ng-content select=".body"></ng-content>
  7. </div>
  8. <div class="panel-footer">
  9. {{currentDate | date : "yyyy-MM-dd HH:mm:ss"}}
  10. </div>
  11. </div>

HTML

  1. import { Component, OnInit } from '@angular/core';
  2. import { setInterval } from 'timers';
  3.  
  4. @Component({
  5. selector: 'panel',
  6. templateUrl: './panel.component.html',
  7. styleUrls: ['./panel.component.scss']
  8. })
  9. export class PanelComponent implements OnInit {
  10.  
  11. currentDate : Date;
  12.  
  13. constructor() { }
  14.  
  15. ngOnInit() {
  16. this.currentDate = new Date();
  17. setInterval(() => {
  18. this.currentDate = new Date();
  19. }, 1000);
  20. }
  21.  
  22. }

TS

    》指令代码

  1. import { Directive, Input, ElementRef, HostListener } from '@angular/core';
  2.  
  3. @Directive({
  4. selector: '[appMyHighLight]'
  5. })
  6. export class MyHighLightDirective {
  7.  
  8. @Input()
  9. highlightColor : string;
  10.  
  11. constructor(
  12. private _elementRef : ElementRef // 依赖注入:ElementRef对象用来操作DOM节点
  13. ) { }
  14.  
  15. @HostListener("mouseenter") // 监听鼠标移入事件
  16. onMouseEnter() {
  17. this.highlight(this.highlightColor);
  18. }
  19.  
  20. @HostListener("mouseleave") // 监听鼠标移除事件
  21. onmouseleave() {
  22. this.highlight(null);
  23. }
  24.  
  25. // 利用 ElementRef 修改DOM
  26. private highlight(color : string) {
  27. this._elementRef.nativeElement.style.backgroundColor = color;
  28. }
  29.  
  30. }

TS

    》应用指令的组件

  1. <panel>
  2. <div class="heading">
  3. 测试组件01
  4. </div>
  5. <div appMyHighLight highlightColor="#ff3300" class="body">
  6. <p>重庆是个好地方</p>
  7. </div>
  8. </panel>

HTML

  1. import { Component, OnInit } from '@angular/core';
  2. import { TestService } from '../services/test.service';
  3.  
  4. @Component({
  5. selector: 'test01',
  6. templateUrl: './test01.component.html',
  7. styleUrls: ['./test01.component.scss']
  8. })
  9. export class Test01Component implements OnInit {
  10.  
  11. constructor(
  12. ) { }
  13.  
  14. ngOnInit() {
  15. }
  16.  
  17. onClick() : void {
  18. // 将对象转化成JSON字符串并存储道浏览器缓存中
  19. window.localStorage.setItem("user", JSON.stringify({name: "王杨帅", age: 9}));
  20. }
  21.  
  22. }

TS

  2.2 结构性指令

    》指令代码

  1. import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';
  2.  
  3. @Directive({
  4. selector: '[appDelay]'
  5. })
  6. export class DelayDirective {
  7.  
  8. constructor(
  9. private templateRef: TemplateRef<any>,
  10. private viewContainerRef: ViewContainerRef
  11. ) { }
  12.  
  13. @Input() set appDelay(time: number) {
  14. setTimeout(() => {
  15. this.viewContainerRef.createEmbeddedView(this.templateRef);
  16. }, time);
  17. }
  18.  
  19. }

TS

    》应用指令的组件

  1. <panel>
  2. <div class="heading">
  3. 测试组件02
  4. </div>
  5. <div class="body">
  6. <div *ngFor="let item of [1,2,3]">
  7. <span *appDelay="500 * item">
  8. 第 {{item}} 张卡片
  9. </span>
  10. </div>
  11. </div>
  12. </panel>

HTML

  1. import { Component, OnInit } from '@angular/core';
  2. import { TestService } from '../services/test.service';
  3.  
  4. @Component({
  5. selector: 'test02',
  6. templateUrl: './test02.component.html',
  7. styleUrls: ['./test02.component.scss']
  8. })
  9. export class Test02Component implements OnInit {
  10.  
  11. constructor(
  12. ) { }
  13.  
  14. ngOnInit() {
  15. }
  16.  
  17. onClick() : void {
  18. // 从浏览器缓存中获取数据【PS: 获取到的是string类型的数据】
  19. let data = localStorage.getItem("user");
  20. console.log(data);
  21.  
  22. // 将JSON字符串转化成对象
  23. let json_data = JSON.parse(data);
  24.  
  25. console.log(json_data.name);
  26. window.localStorage.removeItem("user");
  27. }
  28.  
  29. }

TS

Angular27 指令的更多相关文章

  1. iOS逆向工程之Hopper中的ARM指令

    虽然前段时间ARM被日本软银收购了,但是科技是无国界的,所以呢ARM相关知识该学的学.现在看ARM指令集还是倍感亲切的,毕竟大学里开了ARM这门课,并且做了不少的实验,当时自我感觉ARM这门课学的还是 ...

  2. 步入angularjs directive(指令)--点击按钮加入loading状态

    今天我终于鼓起勇气写自己的博客了,激动与害怕并存,希望大家能多多批评指导,如果能够帮助大家,也希望大家点个赞!! 用angularjs 工作也有段时间了,总体感觉最有挑战性的还是指令,因为没有指令的a ...

  3. Git小技巧 - 指令别名及使用Beyond Compare作为差异比较工具

    前言 本文主要写给使用命令行来操作Git的用户,用于提高Git使用的效率.至于使用命令还是GUI(Tortoise Git或VS的Git插件)就不在此讨论了,大家根据自己的的喜好选择就好.我个人是比较 ...

  4. 浅谈JSP中include指令与include动作标识的区别

    JSP中主要包含三大指令,分别是page,include,taglib.本篇主要提及include指令. include指令使用格式:<%@ include file="文件的绝对路径 ...

  5. [Django]用户权限学习系列之User权限基本操作指令

    针对Django 后台自带的用户管理系统,虽说感觉还可以,但是为了方便用户一些操作,特别设计自定义的用户权限管理系统. 在制作权限页面前,首先需要了解权限和用户配置权限的指令,上章讲到权限的添加,删除 ...

  6. 机器指令翻译成 JavaScript —— No.5 指令变化

    上一篇,我们通过内置解释器的方案,解决任意跳转的问题.同时,也提到另一个问题:如果指令发生变化,又该如何应对. 指令自改 如果指令加载到 RAM 中,那就和普通数据一样,也是可以随意修改的.然而,对应 ...

  7. ARM的栈指令

    ARM的指令系统中关于栈指令的内容比较容易引起迷惑,这是因为准确描述一个栈的特点需要两个参数: 栈地址的增长方向:ARM将向高地址增长的栈称为递增栈(Descendent Stack),将向低地址增长 ...

  8. IL指令详细表

    名称 说明 Add 将两个值相加并将结果推送到计算堆栈上. Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. Add.Ovf.Un 将两个无符号整数值相加,执行溢出检查,并且 ...

  9. Angular学习-指令入门

    1.指令的定义 从用户的角度来看,指令就是在应用的模板中使用的自定义HTML标签.指令可以很简单,也可以很复杂.AngularJS的HTML编译器会解析指令,增强模板的功能.也是组件化未来的发展趋势, ...

随机推荐

  1. 9.9 Python 文档字符串

    9.9 Python 文档字符串. 进入 Python 标准库所在的目录. 检查每个 .py 文件看是否有__doc__ 字符串, 如果有, 对其格式进行适当的整理归类. 你的程序执行完毕后, 应该会 ...

  2. 使用Gson轻松解决复杂结构的Json数据解析

    转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50961803 JSON简介 JSON(JavaScript Object Notati ...

  3. Java JDK安装和配置(Windows)

    安装和配置JDK JDK中自带了JRE,不需要单独下载, 打开JDK安装, 选择安装目录,下一步,装完JDK,会问是否安装JRE,选下一步, 最后还会问是否安装Java FX, 装完后就全部完成了JD ...

  4. Django--django-admin.py on windows does not work

    使用命令:Python django-admin.py startproject projectname 使用django-admin.py startapp myblog没有创建新的app,使用下面 ...

  5. (装)Android杂谈--禁止TimePicker控件通过keyboard输入

    Android 4.1版本以上用的是类似与ios的滚动时间控件,但是4.1以下,用的TimePicker确实通过点击上下按钮来更改时间的,虽然也提供了编辑框编辑,但是可能会超出编辑范围 如果要禁止编辑 ...

  6. dxjk中 支付宝二维码支付 git 存疑

    线上的vendor/latrell/alipay 文件拉取不了至本地,失去了git监控 要想本地使用 1.注释掉config/app.php 'providers' 下的Latrell模块 2.下载线 ...

  7. Android的移动存储解决方案之SharedPreferences

    搞Android有一段时间了,但是并没写过有关Android的博客,今天给大家介绍一下SharedPreferences.    使用SharedPreferences保存key-value对的步骤如 ...

  8. [三卷天书]记一个asp.net生成两个日期范围内生成随机时间的方法

    想网上找个生成随机天数的方法找不到,后面只得自己写了,贴给大家方便使用 思路:算两个日期的相差天数,然后在0到相差天数的范围内生成随机数,再用结束时间的天数部分减去这个随机数,代码: /// < ...

  9. VirtualBox 虚拟机 centos7 下 设置静态ip 并支持 xshell 远程登陆的设置方法

    1.设置虚拟机使用“桥接模式” 2.使用 vi /etc/sysconfig/network-scripts/ifcfg-enp0s3  打开配置文件(其中 enp0s3 是你的linux的网卡名,在 ...

  10. CommonJS、CMD和AMD规范分别是什么

    CommonJS.CMD和AMD规范分别是什么 Commonjs是用在服务器端的,同步的,如nodejs amd, cmd是用在浏览器端的,异步的,如requirejs和seajs 其中,amd先提出 ...