Angular2 - Starter - Directives

Angular2的视图是动态的,在不修改绑定到UI上的源数据的情况下,我们可以通过指令来改变数据的是否呈现,呈现形式,呈现样式。

(1).Angular2提供的最常用的指令是:

1.*ngIf=‘expression‘,通过expression的运算结果加载或者写在当前元素.

 <h6 class="bg-success person-info-panel" *ngIf="selectedPerson !== null && utilities.isNotEmptyStr(selectedPerson.name)">
      {{selectedPerson.name}},{{selectedPerson.phone}}
    </h6>

  

2.*ngFor=‘expression and declarations‘ 循环输入的数组,根据每个成员的数据加载渲染模板为视图

<li class="person-info-panel" *ngFor="let person of availablePeople;let i = index">
        <a devide-age-group [birthDay]="person.birthDay" (click)="updateSeletedPerson(person)">{{person.name}},{{person.email}},{{person.phone | tailNumberLength:5}},{{person.birthDay}}</a>
      </li>

3.[ng-switch]=‘expression‘ 根据expression结果的不同case,加载不同的模板

<div [ng-switch]="conditionExpression">
        <template [ng-switch-when]="case1">case1</template>
        <template [ng-switch-when]="case1">case2</template>
        <template [ng-switch-default]>default</template>
      </div>

(2) 自定义指令,如下我们来自定义一个根据输入的不同的生日来划分年龄段,并以不同的样式呈现用户信息的指令devide-age-group

//age-group.service
import { Injectable } from ‘@angular/core‘;

@Injectable()
export class AgeGroupSvc{
  constructor(){}
//该服务根据输入的生日返回不同的年龄组类别
  getAgeByBirth(birthDay:Date){
    let todayYear = (new Date()).getUTCFullYear();
    let birthYear = birthDay.getUTCFullYear();
    let age = todayYear - birthYear;
    return age;
  }

  getAgeGroupByBirth(birthDay:Date){
    let age = this.getAgeByBirth(birthDay);
    if(age < 18){
      return 1;
    }else if(age >= 18 && age < 25){
      return 2;
    }else if(age >= 25 && age < 50){
      return 3;
    }else{
      return 4;
    }
  }
}
import { Directive,SimpleChanges, ElementRef, Renderer,Input,OnChanges,OnInit,DoCheck} from ‘@angular/core‘;

import { AgeGroupSvc } from ‘./age‘
import set = Reflect.set;
@Directive({
/*
可用的选择器包括
‘a[directiveName]‘;只对a标签且有directiveName属性的元素执行该指令;
‘directiveName‘;对<directiveName></directiveName>这样的元素执行该指令;
‘[diractiveName]‘;对所有具有directiveName属性的元素执行该指令;
*/
  selector: ‘[devide-age-group]‘, // 定义css选择器为属性选择
  providers:[
//AgeGroupSvc作为一个服务,需申明为一个提供商
    AgeGroupSvc
  ]
})

export class AgeGroupDevideDiretive implements OnInit{
  ngOnInit(): void {

  }

  element:ElementRef;
  _ageGroupSvc:AgeGroupSvc;
//接收到输入的生日时,通过age-group 服务得到年龄组类别,根据不同的类别为显示用户信息的元素设置不同的样式
  @Input(‘birthDay‘) set setBirthDay(birthDay:Date){
    let targetColor = ‘white‘;
    let _birthDay = new Date(birthDay);
    if(_birthDay instanceof Date){
      let ageGroup = this._ageGroupSvc.getAgeGroupByBirth(_birthDay);
      switch(ageGroup){
        case 1:
          targetColor = ‘red‘;
          break;
        case 2:
          this.element.nativeElement.style.color = ‘black‘;
          targetColor = ‘yellow‘;
          break;
        case 3:
          targetColor = ‘green‘;
          break;
        case 4:
          targetColor = ‘blue‘;
          break;
        default:break;
      }
    }

    this.element.nativeElement.style.backgroundColor = targetColor;
  }
  constructor(element: ElementRef, renderer: Renderer, ageGroupSvc:AgeGroupSvc) {
    this.element = element;
    this._ageGroupSvc = ageGroupSvc;
    // `nativeElement` is the direct reference to the DOM element
    element.nativeElement.style.color = ‘white‘;
  }
}

@NgModule({
  bootstrap: [ AppComponent ],
  declarations: [
//在应用module中引入AgeGroupDevideDiretive
    AgeGroupDevideDiretive
]
})

  

//devide-age-group以属性的方式引入,angular在当前元素的渲染的最后一步就是对该元素执行devide-age-group 指令
<a devide-age-group [birthDay]="person.birthDay" (click)="updateSeletedPerson(person)">
{{person.name}},{{person.email}},{{person.phone | tailNumberLength:5}},{{person.birthDay}}
</a>

  

时间: 2025-01-01 17:05:38

Angular2 - Starter - Directives的相关文章

Angular2 - Starter - Pipes, Custom Pipes

在Angular2 模板中,我们在显示数据时,可以使用通道将数据转换成相应的格式的值的形式来显示,而且这不改变源数据.比如,我们可以使用date通道来转换时间显示的格式: {{date | date:'yyyy-MM-dd'}} ,(1) 以下是Angular提供的基本的通道. Basic Pipes Pipe Name Usage Parameters or Effection currency {{test.currency | currency }} 1234569678 > USD1,2

Angular2 Hello World 之 RC6

angular2还没有发布正式版,确实有点不靠谱,变化太频繁,之前写的demo直接将js升级到最新版之后发现就不能用了……所以现在在写一篇demo——基于RC6.参考:http://web3.codeproject.com/Articles/1124864/ASP-NET-Core-and-Angular-Code-Venture-Part 首先还是先创建一个ASP.NET Core Web Application空应用程序.还是在Startup.cs类中添加静态文件处理,下面说一下几处和上一篇

ASP.NET Core + Angular 2 Template for Visual Studio

多个月以来,我和多个Github上的社区贡献者一起建立支持库.包,我们最终的目的是希望完成这样一个作为起点的模板,也就是基于把Typescript代码和Angular2宿主在ASP.NET Core项目中,这个模板包含一下这些方面: 服务端预加载(预渲染):这样你的UI可以快速的显示,甚至在浏览器下载Javascript之前. Webpack中间件集成:在开发期间,你不需要一直重新编译你的客户端项目,或者你可以用一个watcher工具在后台帮你做这些事. 模块热拔插:在开发期间,一旦你编辑了一个

NET Core + Angular 2

ASP.NET Core + Angular 2 Template for Visual Studio 2017-01-11 08:45 by 小白哥哥, 2069 阅读, 19 评论, 收藏, 编辑 多个月以来,我和多个Github上的社区贡献者一起建立支持库.包,我们最终的目的是希望完成这样一个作为起点的模板,也就是基于把Typescript代码和Angular2宿主在ASP.NET Core项目中,这个模板包含一下这些方面: 服务端预加载(预渲染):这样你的UI可以快速的显示,甚至在浏览器

angular2系列教程(五)Structural directives、再谈组件生命周期

今天,我们要讲的是structural directives和组件生命周期这两个知识点.structural directives顾名思义就是改变dom结构的指令.著名的内建结构指令有 ngIf, ngSwitch and ngFor. 例子 例子是我自己改写的,编写一个structural directives,然后通过这个指令实例化和注销组件,在此同时监视组件生命周期. 源代码 UnlessDirective 这个指令是官网示例中的指令. src/unless.directive.ts im

迈向angularjs2系列(2):angular2组件和指令详解

<%= INIT %> 内容 一:angular2 helloworld! 为了简单快速的运行一个ng2的app,那么通过script引入预先编译好的angular2版本和页面的基本框架. index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> &l

Angular2开发笔记

Problem 使用依赖注入应该注意些什么 服务一般用来做什么 指令一般用来做什么 angular2如何提取公共组件 angular2为什么不需要提公共组件 父组件与子组件之间如何通讯 什么时候应该使用ngModel 为什么要用Typescript?我喜欢JavaScript 为什么如Input之类的语法后面必须加() Solution 使用依赖注入应该注意些什么 首先我们要明白什么是依赖注入(Dependency Injection, DI),Java程序员应该不会陌生,DI是一种编程模式,它

Angular2 架构

1. 说明 Angular 2 是一个用 HTML 和 JavaScript (或者可以编译成JavaScript)来构建应用程序的框架.该框架包含了一系列的库. 在 Angular 里,我们这样来构建应用程序:用带 Angular 扩展语法的 HTML 写模板 ,用 组件 类管理这些模板,用 服务 添加应用逻辑, 用 根组件 完成 Angular 启动 . 首先,我们来看一些整体的结构图,这个图来自于官方网站. 通过图可以看出,Angular 应用中的 8 个主要部分: l 模块 (Modul

Angular2组件开发—调用服务(三)

注入一个复杂的服务 EzAlgo相当简单,使用new或者使用Injector来获得一个实例看起来差别不大.那如果我们的EzApp组件要使用Http服务呢? 第一眼看上去,Http服务显然是一个真正有用的服务 - 因为看起来相当的复杂 - Http依赖于XHRBackend和BaseRequestOptions,而XHRBackend又依赖于BrowserXHR. 我们可以有两种方法获得一个Http的实例,以便通过它获得网络访问的功能: 1. 使用new进行实例化 如果我们使用传统的new方式创建