angula5基本指令的学习

指令是ng最为强大的功能之一,跟之前的angular.js 语法不一样,angular5采用了一种新的语言,typescript语法,但是很多内容相似。下面为大家介绍自己在学习5的一些基础知识

1、*ngFor 像 for 循环一样,可以重复的从数组中取值并显示出来。
/ .ts

this.userInfo = ['张三', '李四', '王五'];

// .html

<div class="ui list" *ngFor="let username of userInfo">
 <div class="item">{{username}}div>
div>
讲解: 
他的语法是 *ngFor="let username of userInfo" ,其中 userInfo 是从中取值的数组,username 是每次从中取出来的值。然后在这个标签里面的内容就会重复执行,并通过双向绑定,将 username 显示出来。
2、ngIf:根据条件决定是否显示或隐藏这个元素。

<div *ngIf="false">div>
<div *ngIf="a > b">div>
<div *ngIf="username == '张三'">div>
<div *ngIf="myFunction()">div>
永远不会显示
当 a 大于 b 的时候显示
当 username 等于 张三 的时候显示
根据 myFunction() 这个函数的返回值,决定是否显示

3、ngSwitch 防止条件复杂的情况导致过多的使用 ngIf。
例子:
// .html

<div class="container" [ngSwitch]="myAge">
 <div *ngSwitchCase="'10'">age = 10div>
 <div *ngSwitchCase="'20'">age = 20div>
 <div *ngSwitchDefault="'18'">age = 18div>
div>
讲解: 

[ngSwitch] 先与目标进行绑定,ngSwitchCase 列出每个可能性,ngSwitchDefault 列出默认值。
4、ngStyle 可以使用动态值给特定的 DOM 元素设定 CSS 属性
// .ts
backColor: string = 'red';

// .html
<div [style.color]="yellow">
 你好,世界
div>
<div [style.background-color]="backColor">
 你好,世界
div>
<div [style.font-size.px]="20">
 你好,世界
div>
<div [ngStyle]="{color: 'white', 'background-color': 'blue', 'font-size.px': '20'}">
 你好,世界
div>
直接设置颜色为 yellow。
设置背景颜色为 backColor,并可以在 .ts 文件中对 backColor 的值进行修改。
设置字体大小,需要注意的是 只写 font-size 会报错,必须在后面加上 .px。当然 .em .% 都是可以的。
前三种都是只设置一个,写 [ngStyle] 可以同时写多个,使用花括号包住里面的内功。需要注意的是连字符 - 是不允许出现在对象的键名当中的,如果使用 background-color 等时需要加上单引号。
5、动态地设置和改变一个给定 DOM 元素的 CSS类
// .scss
.bordered {
 border: 1px dashed black;
 background-color: #eee;
}

// .ts
isBordered: boolean = true;

// .html
<div [ngClass]="{bordered: isBordered}">
 是否显示边框
div>
scss 中设置了样式,相当于你建了一个 class="bordered" 。
ts 中新建了一个 isBordered,用于判断是否显示 .scss 中的样式。
html 中用 isBordered 作为 bordered 是否显示 的判断依据。

6、ngNonBindable 告诉 Angular 不要绑定页面的某个部分。
.html

<div ngNonBindable>
 {{我不会被绑定}}
div>
讲解: 
使用了 ngNonBindable ,花括号就会被当做字符串一起显示出来。
7、ngcontent 在组件中嵌入模板代码,方便定制可复用的组件。
比如:页面的header是个通用组件,导航菜单样式已经设定好,只需在header标签内加上菜单内容。
源码以前文为基础。
<app-header #header [title]="title" name="{{name}}" (checkEmitter)="onCheckedChange($event)" >
  <menu>
    <ul>
      <li>aali>
      <li>bbli>
      <li>ccli>
    ul>
  menu>
app-header>
<app-header #header2 [title]="title2" name="{{name}}" (checkEmitter)="onCheckedChange($event)" >app-header>
<button (click)="header.toggle()">通过本地变量调用子组件方法button>
<button (click)="headerToggle()">通过ViewChild调用子组件方法button>
//header组件
<p>
  {{title}}
p>
<p><input type="checkbox" name="cb" [(ngModel)]="isChecked" (click)="toggle()" />Checkbox <br />p>
<ng-content select="menu">ng-content>
用ng-content标签,将父组件模板中包含的menu标签内容加到指定位置。select属性支持css选择器,如:"#id",".class","[name=value]"等 个人感觉跟vue里面的slot效果一样的
8[innerHtml]
在AngularJS 1.x 中可以使用ng-bind-html来插入一段html代码,相当于struts2 标签的escape属性。但是AngularJS 2中取消了ng-bind-html,当项目中确实有需要动态插入html代码的时候我们该怎么做呢?

解决方法:
使用[innerHtml]代替ng-bind-html。
innerHtml属性,用于设置标签内的html,[innerHtml]=”data.title”用于动态将AngularJS 2的变量值赋给innerHtml属性,以实现ng-bind-html的效果。

完整示例:
<a href="#" target="_blank" [innerHtml]="data">a>
export class SearchComponent {
    private data: string = "<b>helloWorldb>";
}

你可能感兴趣的:(angular)