1 自定概述

2 自定义指令

  详情参见《揭秘Angular2》

  2.1 属性指令

    》工具代码

<div class="panel panel-primary">
<div class="panel-heading">
<ng-content select=".heading"></ng-content>
</div>
<div class="panel-body">
<ng-content select=".body"></ng-content>
</div>
<div class="panel-footer">
{{currentDate | date : "yyyy-MM-dd HH:mm:ss"}}
</div>
</div>

HTML

import { Component, OnInit } from '@angular/core';
import { setInterval } from 'timers'; @Component({
selector: 'panel',
templateUrl: './panel.component.html',
styleUrls: ['./panel.component.scss']
})
export class PanelComponent implements OnInit { currentDate : Date; constructor() { } ngOnInit() {
this.currentDate = new Date();
setInterval(() => {
this.currentDate = new Date();
}, 1000);
} }

TS

    》指令代码

import { Directive, Input, ElementRef, HostListener } from '@angular/core';

@Directive({
selector: '[appMyHighLight]'
})
export class MyHighLightDirective { @Input()
highlightColor : string; constructor(
private _elementRef : ElementRef // 依赖注入:ElementRef对象用来操作DOM节点
) { } @HostListener("mouseenter") // 监听鼠标移入事件
onMouseEnter() {
this.highlight(this.highlightColor);
} @HostListener("mouseleave") // 监听鼠标移除事件
onmouseleave() {
this.highlight(null);
} // 利用 ElementRef 修改DOM
private highlight(color : string) {
this._elementRef.nativeElement.style.backgroundColor = color;
} }

TS

    》应用指令的组件

<panel>
<div class="heading">
测试组件01
</div>
<div appMyHighLight highlightColor="#ff3300" class="body">
<p>重庆是个好地方</p>
</div>
</panel>

HTML

import { Component, OnInit } from '@angular/core';
import { TestService } from '../services/test.service'; @Component({
selector: 'test01',
templateUrl: './test01.component.html',
styleUrls: ['./test01.component.scss']
})
export class Test01Component implements OnInit { constructor(
) { } ngOnInit() {
} onClick() : void {
// 将对象转化成JSON字符串并存储道浏览器缓存中
window.localStorage.setItem("user", JSON.stringify({name: "王杨帅", age: 9}));
} }

TS

  2.2 结构性指令

    》指令代码

import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';

@Directive({
selector: '[appDelay]'
})
export class DelayDirective { constructor(
private templateRef: TemplateRef<any>,
private viewContainerRef: ViewContainerRef
) { } @Input() set appDelay(time: number) {
setTimeout(() => {
this.viewContainerRef.createEmbeddedView(this.templateRef);
}, time);
} }

TS

    》应用指令的组件

<panel>
<div class="heading">
测试组件02
</div>
<div class="body">
<div *ngFor="let item of [1,2,3]">
<span *appDelay="500 * item">
第 {{item}} 张卡片
</span>
</div>
</div>
</panel>

HTML

import { Component, OnInit } from '@angular/core';
import { TestService } from '../services/test.service'; @Component({
selector: 'test02',
templateUrl: './test02.component.html',
styleUrls: ['./test02.component.scss']
})
export class Test02Component implements OnInit { constructor(
) { } ngOnInit() {
} onClick() : void {
// 从浏览器缓存中获取数据【PS: 获取到的是string类型的数据】
let data = localStorage.getItem("user");
console.log(data); // 将JSON字符串转化成对象
let json_data = JSON.parse(data); console.log(json_data.name);
window.localStorage.removeItem("user");
} }

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. bzoj 1226 学校食堂Dining

    Written with StackEdit. Description 小\(F\) 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜 ...

  2. IOS socket编程--Asyncsocket

    iPhone的标准推荐是CFNetwork 库编程,其封装好的开源库是 cocoa AsyncSocket库,用它来简化CFNetwork的调用,它提供了异步操作 主要特性有: 队列的非阻塞的读和写, ...

  3. Servlet中的Filter(过滤器)

     Filter,过滤器,是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改.判断等,把不符合规则的请求在中途拦截或修改.也可以对响应进行过滤,拦截或修改 ...

  4. LeetCode Partition to K Equal Sum Subsets

    原题链接在这里:https://leetcode.com/problems/partition-to-k-equal-sum-subsets/description/ 题目: Given an arr ...

  5. 7 函数——《Swift3.0从入门到出家

    6 函数 函数就是对某个功能的封装,一个swift程序可能由多个函数组成 swift中定义函数的格式: func 函数名称(参数列表) —>函数返回值类型{ 函数体 return } 函数定义要 ...

  6. POJ2226(最小顶点覆盖)

    Muddy Fields Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10044   Accepted: 3743 Des ...

  7. 【转】理解JMeter聚合报告(Aggregate Report)

    Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”.今天再次有同行问到这个报告中的各项数据表示什么意思,顺便在这里公布一下,以备大家查阅. 如果 ...

  8. java代码从键盘输入次数,然后进行运算-----菜鸟如此菜

    package com.aaa; import java.util.Scanner; // //求两数相加的和.从键盘输入 public class ftwert { public static vo ...

  9. 杂项-公司:摩根大通百科-un

    ylbtech-杂项-公司:摩根大通百科 摩根大通集团(JPMorgan Chase & Co,NYSE:JPM:),2000年12月由J.P.摩根公司和大通-曼哈顿公司合并而成,是美国主要的 ...

  10. SSH开发中的注解使用

    在SSH中使用注解可以减少配置XML文件,毕竟随着项目规模的扩大,配置bean将把Spring的配置文件(applicationContext.xml)变得很混乱 在Spring的配置文件中开启注解扫 ...