• Angular2


    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>
    

      

  • 相关阅读:
    XmLHttpRequst下载Excel
    mysq for visual studio 1.1.1
    滚动条样式设置
    正则
    比较偏门的JVM语言Quercus
    OMG 在线思维导图都有开源的
    从几篇文字得到关于web app开发的性能问题的答案
    用linux遇到的一个死循环
    有道笔记
    FreeBSD 10 发布
  • 原文地址:https://www.cnblogs.com/wzcblogs/p/6265745.html
Copyright © 2020-2023  润新知