zoukankan      html  css  js  c++  java
  • Angular27 指令

    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
  • 相关阅读:
    Jquery 跨域问题
    Linux下scp的用法
    JZ2440_V3_内核驱动程序_点亮一个LED灯
    MATLAB GUIDE 上位机串口通信开发 绘制图形
    关于在DSP工程内数组、strnpy函数、atoi函数的使用心得
    Visio中手绘图形的填充
    Ubuntu16.04NFS配置与ARM开发板互传文件_挂载和卸载
    树莓派压力测试工具STui + Stress的使用
    如何将代码优雅的插入到word中
    常用正则表达式
  • 原文地址:https://www.cnblogs.com/NeverCtrl-C/p/9250640.html
Copyright © 2011-2022 走看看