template分支,用12个例子全面示范Angular的模板语法

// 使用方法
git clone https://git.oschina.net/mumu-osc/learn-component.git
cd learn-component
git pull origin template
npm install
ng serve

1.基本插值语法

// test-interpolation.component.ts
import { Component, OnInit } from '@angular/core'; @Component({
selector: 'test-interpolation',
templateUrl: './test-interpolation.component.html',
styleUrls: ['./test-interpolation.component.css']
})
export class TestInterpolationComponent implements OnInit {
public title = '假的星际争霸2';
constructor() { } ngOnInit() {
} public getVal():any{
return 65535;
}
}
<!-- test-interpolation.component.html -->
<div class="panel panel-primary">
<div class="panel-heading">基本插值语法</div>
<div class="panel-body">
<h3>
欢迎来到{{title}}!
</h3>
<h3>1+1={{1+1}}</h3>
<h3>可以调用方法{{getVal()}}</h3>
</div>
</div>

2.模板内的局部变量

// test-temp-ref-var.component.ts
import { Component, OnInit } from '@angular/core'; @Component({
selector: 'test-temp-ref-var',
templateUrl: './test-temp-ref-var.component.html',
styleUrls: ['./test-temp-ref-var.component.css']
})
export class TestTempRefVarComponent implements OnInit { constructor() { } ngOnInit() {
} public sayHello(name:string):void{
alert(name);
}
}
<!-- test-temp-ref-var.component.html -->
<div class="panel panel-primary">
<div class="panel-heading">模板内的局部变量</div>
<div class="panel-body">
<input #heroInput>
<p>{{heroInput.value}}</p>
<button class="btn btn-success" (click)="sayHello(heroInput.value)">局部变量</button>
</div>
</div>

3.单向值绑定

// test-value-bind.component.ts
import { Component, OnInit } from '@angular/core'; @Component({
selector: 'test-value-bind',
templateUrl: './test-value-bind.component.html',
styleUrls: ['./test-value-bind.component.css']
})
export class TestValueBindComponent implements OnInit {
public imgSrc:string="./assets/imgs/1.jpg"; constructor() { } ngOnInit() {
} public changeSrc():void{
if(Math.ceil(Math.random()*1000000000)%2){
this.imgSrc="./assets/imgs/2.jpg";
}else{
this.imgSrc="./assets/imgs/1.jpg";
}
}
}
<!-- test-value-bind.component.html -->
<div class="panel panel-primary">
<div class="panel-heading">单向值绑定</div>
<div class="panel-body">
<img [src]="imgSrc" />
<button class="btn btn-success" (click)="changeSrc()">修改图片src</button>
</div>
</div>

4.事件绑定

import { Component, OnInit } from '@angular/core';

@Component({
selector: 'test-event-binding',
templateUrl: './test-event-binding.component.html',
styleUrls: ['./test-event-binding.component.css']
})
export class TestEventBindingComponent implements OnInit { constructor() { } ngOnInit() {
} public btnClick(event):void{
alert("测试事件绑定!");
}
}
<div class="panel panel-primary">
<div class="panel-heading">事件绑定</div>
<div class="panel-body">
<button class="btn btn-success" (click)="btnClick($event)">测试事件</button>
</div>
</div>

5.双向绑定

// test-twoway-binding.component.ts
import { Component, OnInit } from '@angular/core'; @Component({
selector: 'test-twoway-binding',
templateUrl: './test-twoway-binding.component.html',
styleUrls: ['./test-twoway-binding.component.css']
})
export class TestTwowayBindingComponent implements OnInit {
public fontSizePx:number=14; constructor() { } ngOnInit() {
} }
<!-- test-twoway-binding.component.html -->
<div class="panel panel-primary">
<div class="panel-heading">双向绑定</div>
<div class="panel-body">
<font-resizer [(size)]="fontSizePx"></font-resizer>
<div [style.font-size.px]="fontSizePx">Resizable Text</div>
</div>
</div>
// font-resizer.component.ts
import { Component, OnInit, EventEmitter, Input, Output } from '@angular/core'; @Component({
selector: 'font-resizer',
templateUrl: './font-resizer.component.html',
styleUrls: ['./font-resizer.component.css']
})
export class FontResizerComponent implements OnInit {
@Input() size: number | string;
@Output() sizeChange = new EventEmitter<number>(); constructor() { } ngOnInit() {
} dec() { this.resize(-1); }
inc() { this.resize(+1); } resize(delta: number) {
this.size = Math.min(40, Math.max(8, +this.size + delta));
this.sizeChange.emit(this.size);
}
}
<!-- font-resizer.component.html -->
<div style="border: 2px solid #333">
<p>这是子组件</p>
<button (click)="dec()" title="smaller">-</button>
<button (click)="inc()" title="bigger">+</button>
<label [style.font-size.px]="size">FontSize: {{size}}px</label>
</div>

6.*ngIf的用法

// test-ng-if.component.ts
import { Component, OnInit } from '@angular/core'; @Component({
selector: 'test-ng-if',
templateUrl: './test-ng-if.component.html',
styleUrls: ['./test-ng-if.component.css']
})
export class TestNgIfComponent implements OnInit {
public isShow:boolean=true; constructor() { } ngOnInit() {
} public toggleShow():void{
this.isShow=!this.isShow;
}
}
<div class="panel panel-primary">
<div class="panel-heading">*ngIf的用法</div>
<div class="panel-body">
<p *ngIf="isShow" style="background-color:#ff3300">显示还是不显示?</p>
<button class="btn btn-success" (click)="toggleShow()">控制显示隐藏</button>
</div>
</div>

7.*ngFor用法

// test-ng-for.component.ts
import { Component, OnInit } from '@angular/core'; @Component({
selector: 'test-ng-for',
templateUrl: './test-ng-for.component.html',
styleUrls: ['./test-ng-for.component.css']
})
export class TestNgForComponent implements OnInit {
public races:Array<any>=[
{name:"人族"},
{name:"虫族"},
{name:"神族"}
]; constructor() { } ngOnInit() {
} }
<!-- test-ng-for.component.html -->
<div class="panel panel-primary">
<div class="panel-heading">*ngFor用法</div>
<div class="panel-body">
<h3>请选择一个种族</h3>
<ul>
<li *ngFor="let race of races;let i=index;">
{{i+1}}-{{race.name}}
</li>
</ul>
</div>
</div>

8.NgClass用法

// test-ng-class.component.ts
import { Component, OnInit } from '@angular/core'; @Component({
selector: 'test-ng-class',
templateUrl: './test-ng-class.component.html',
styleUrls: ['./test-ng-class.component.scss']
})
export class TestNgClassComponent implements OnInit {
public currentClasses: {}; public canSave: boolean = true;
public isUnchanged: boolean = true;
public isSpecial: boolean = true; constructor() { } ngOnInit() { } setCurrentClasses() {
this.currentClasses = {
'saveable': this.canSave,
'modified': this.isUnchanged,
'special': this.isSpecial
};
}
}
<!-- test-ng-class.component.html -->
<div class="panel panel-primary">
<div class="panel-heading">NgClass用法</div>
<div class="panel-body">
<div [ngClass]="currentClasses">同时批量设置多个样式</div>
<button class="btn btn-success" (click)="setCurrentClasses()">设置</button>
</div>
</div>

9.NgStyle用法

// test-ng-style.component.ts
import { Component, OnInit } from '@angular/core'; @Component({
selector: 'test-ng-style',
templateUrl: './test-ng-style.component.html',
styleUrls: ['./test-ng-style.component.css']
})
export class TestNgStyleComponent implements OnInit {
public currentStyles: {}
public canSave:boolean=false;
public isUnchanged:boolean=false;
public isSpecial:boolean=false; constructor() { } ngOnInit() {
} setCurrentStyles() {
this.currentStyles = {
'font-style': this.canSave ? 'italic' : 'normal',
'font-weight': !this.isUnchanged ? 'bold' : 'normal',
'font-size': this.isSpecial ? '24px' : '12px'
};
}
}
<!-- test-ng-style.component.html -->
<div class="panel panel-primary">
<div class="panel-heading">NgStyle用法</div>
<div class="panel-body">
<div [ngStyle]="currentStyles">
用NgStyle批量修改内联样式!
</div>
<button class="btn btn-success" (click)="setCurrentStyles()">设置</button>
</div>
</div>

10.NgModel的用法

import { Component, OnInit } from '@angular/core';

@Component({
selector: 'test-ng-model',
templateUrl: './test-ng-model.component.html',
styleUrls: ['./test-ng-model.component.css']
})
export class TestNgModelComponent implements OnInit {
public currentRace:any={name:"随机种族"}; constructor() { } ngOnInit() {
} }
<div class="panel panel-primary">
<div class="panel-heading">NgModel的用法</div>
<div class="panel-body">
<p class="text-danger">ngModel只能用在表单类的元素上面</p>
<input [(ngModel)]="currentRace.name">
<p>{{currentRace.name}}</p>
</div>
</div>

11.管道的用法

import { Component, OnInit } from '@angular/core';

@Component({
selector: 'test-pipe',
templateUrl: './test-pipe.component.html',
styleUrls: ['./test-pipe.component.css']
})
export class TestPipeComponent implements OnInit {
public currentTime: Date = new Date(); constructor() {
window.setInterval(
()=>{this.currentTime=new Date()}
,1000);
} ngOnInit() {
}
}
<div class="panel panel-primary">
<div class="panel-heading">管道的用法</div>
<div class="panel-body">
{{currentTime | date:'yyyy-MM-dd HH:mm:ss'}}
</div>
</div>

12.安全取值

import { Component, OnInit } from '@angular/core';

@Component({
selector: 'test-safe-nav',
templateUrl: './test-safe-nav.component.html',
styleUrls: ['./test-safe-nav.component.css']
})
export class TestSafeNavComponent implements OnInit {
public currentRace:any=null;//{name:'神族'}; constructor() { } ngOnInit() {
} }
<div class="panel panel-primary">
<div class="panel-heading">安全取值</div>
<div class="panel-body">
你选择的种族是:{{currentRace?.name}}
</div>
</div>

用12个例子全面示范Angular的模板语法的更多相关文章

  1. Angular 5.x 学习笔记(1) - 模板语法

    Angular 5.x Template Syntax Learn Note Angular 5.x 模板语法学习笔记 标签(空格分隔): Angular Note on github.com 上手 ...

  2. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(12)-实现用户异步登录和T4模板

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(12)-实现用户异步登录和T4模板 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建  ...

  3. angular 模板语法(官方文档摘录)

    https://angular.cn/guide/template-syntax {{}} 和"" 如果嵌套,{{}}里面求完值,""就是原意 <h3&g ...

  4. 12个免费的 Twitter Bootstrap 后台模板

    在互联网上提供很多免费的 Bootstrap 管理后台主题.所有你需要做的就是将它们下载并安装它们,这真的不是什么难事.问题是如何寻找到能够完美符合您的网站需求的主题.当然,你可以自己制作自定义的主题 ...

  5. Angular - Templates(模板)

    点击查看AngularJS系列目录 转载请注明出处:http://www.cnblogs.com/leosx/ 在Angular中,模板是一个包含了Angular特定元素和属性的HTML.Angula ...

  6. angular 缓存模板 ng-template $templateCache

    由于浏览器加载html模板是异步加载的,如果加载大量的模板会拖慢网站的速度,这里有一个技巧,就是先缓存模板. 使用angular缓存模板主要有三种方法: 方法一:通过script标签引入 <sc ...

  7. Angular for TypeScript 语法快速指南 (基于2.0.0版本)

    引导 import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; platformBrowserDynami ...

  8. python——sklearn完整例子整理示范(有监督,逻辑回归范例)(原创)

    sklearn使用方法,包括从制作数据集,拆分数据集,调用模型,保存加载模型,分析结果,可视化结果 1 import pandas as pd 2 import numpy as np 3 from ...

  9. 图数据库orientDB(1-2)例子

    http://gog.orientdb.com/index.html#/infotab 小朱25岁,出生在教师家庭并且有个姐姐小田,他现在奋斗在帝都.  那么SQL是这样滴!!! CREATE VER ...

随机推荐

  1. async -- await 解决数据异步获取

    在React组件中,也比较一下 Promise 和 Async/Await 的方法异同. 传统地使用 Promise : import React, { Component } from 'react ...

  2. Vue Router 获取url路径参数 query

    https://router.vuejs.org/zh/api/#路由对象属性 $route.query 类型: Object 一个 key/value 对象,表示 URL 查询参数.例如,对于路径  ...

  3. STL源码剖析(算法)

    STL中算法是基于迭代器来实现的. 有了容器中迭代器的实现(对operator*.operator++等的重载),STL中大部分算法实现就显得很简单了. 先看一例关于find算法的实现: templa ...

  4. 我的第一个 RN 项目-趣闻

    代码地址如下:http://www.demodashi.com/demo/13486.html 项目预览 IOS: Android: 扫描体验: 或者点我 整体功能跟之前小程序和 Android 项目 ...

  5. 基于Netty的RPC简易实现

    代码地址如下:http://www.demodashi.com/demo/13448.html 可以给你提供思路 也可以让你学到Netty相关的知识 当然,这只是一种实现方式 需求 看下图,其实这个项 ...

  6. linux磁盘满时,如何定位并删除文件

    原文链接: http://www.cnblogs.com/yinxiangpei/articles/4211743.html @1.一般情况   一般情况下先df看一下,然后cd到要满的盘,执行: d ...

  7. AOP - PostSharp 2.0

    PostSharp是一个非常优秀的AOP框架,使用上非常方便,功能强大,对目标拦截的方法不需要做什么修改,但现在已经商业化运作从PostSharp官方网站下载一个试用版,安装 简单示例PostShar ...

  8. ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程)

    ufldl学习笔记与编程作业:Multi-Layer Neural Network(多层神经网络+识别手写体编程) ufldl出了新教程,感觉比之前的好,从基础讲起,系统清晰,又有编程实践. 在dee ...

  9. 使用 ConfigurationSection 创建自定义配置节

    我们可以通过用自己的 XML 配置元素来扩展标准的 ASP.NET 配置设置集,要完成这一功能,我们必须实现继承System.Configuration.ConfigurationSection 类来 ...

  10. 通道符和xargs命令

    通道符“|“:是将前一个命令的输出做为后一个命令的标准输入.注意:这里的标准输入指的是:通道符右侧命令的处理内容,也就是说左侧的标准输出不能作为右侧命令的参数,只能作为命令的处理对象. 简单讲:只有通 ...