Angular 入门(一)
<p>前端三大框架 :</p><p>Vue:开源项目,适合中小型项目</p>
<p>React:Facebook公司 ,适合中小型项目+RN手机端开发</p>
<p>Angular:Google公司,适合大型项目;简称NG,和Vue年相似</p>
<h2>初识Angular______________________________</h2>
<p>脚本方式: 适合最基本的入门, 实际开发没用.</p>
<p>脚手架方式: 属于工程化的开发方式, 利用脚手架生成完善的项目包.</p>
<p>安装脚手架: npm i -g @angular/cli --force 安装过程中, 有可能弹出选项, 询问是否要分享使用体验(y/N): 直接回车即可</p>
<p><img src="https://img2020.cnblogs.com/blog/1770052/202104/1770052-20210428084939253-482741749.png" alt="" loading="lazy"></p>
<p> </p>
<p> 安装成功之后 可以通过ng v 查看Angular版本</p>
<p><img src="https://img2020.cnblogs.com/blog/1770052/202104/1770052-20210428085206935-1386385641.png" alt="" width="178" height="169" loading="lazy"></p>
<p> </p>
<p> 生成项目包, 关注 cmd 开启的位置, 在哪开 在哪生成</p>
<p>生成过程会有很多项目的询问, 都直接 回车 采用默认值即可; 不然容易会出现各种bug.</p>
<div class="cnblogs_code">
<pre>ng <span style="color: rgba(0, 0, 255, 1)">new</span> 包名</pre>
</div>
<div class="cnblogs_code">
<pre>例如: ng <span style="color: rgba(0, 0, 255, 1)">new</span> ngpro</pre>
</div>
<p>生成结果中, 只要有 这个 successfully 字样即可, 此行不是最后一行</p>
<p><img src="https://img2020.cnblogs.com/blog/1770052/202104/1770052-20210428085529539-967874424.png" alt="" loading="lazy"></p>
<p> </p>
<p> 启动项目: 在项目目录下 , 即 ngpro 目录下执行</p>
<div class="cnblogs_code">
<pre>ng serve --open</pre>
</div>
<p>项目端口号: 4200</p>
<p><img src="https://img2020.cnblogs.com/blog/1770052/202104/1770052-20210428085619321-1038951729.png" alt="" loading="lazy"></p>
<p> </p>
<p> 项目的启动_______________________________________</p>
<p>当访问: localhost:4200 之后, 发生了什么?</p>
<p>访问当前计算机上, 端口号是4200的程序.</p>
<p>4200的程序, 就是 Angular 项目的自带服务器的端口号.</p>
<p>服务器的默认设定: index.html ; 来访用户如果不指定文件名, 则默认提供 index.html</p>
<p>根组件: <app-root></app-root></p>
<p>angular采用 TypeScript 语言进行逻辑层编写</p>
<p>main.ts : 此文件是 webpack 打包工具, 在项目运行时会自动打包引入到 index.html 中</p>
<p>app/app.module.ts 此文件是项目的 根配置文件</p>
<p>app.component.ts 文件, 此文件就是项目的根组件, 类似于 React的 App.js 和 Vue的 App.vue</p>
<p>组件:</p>
<p><img src="https://img2020.cnblogs.com/blog/1770052/202104/1770052-20210428090756922-1972495424.png" alt="" loading="lazy"></p>
<p> </p>
<h2> 组件的制作__________________________</h2>
<p>Angular的组件 类似于 微信小程序 和 原生开发, 把一个页面拆分成3个文件: html , css , ts</p>
<p>angular的文件命名规范:</p>
<p>名字.作用.代码类型</p>
<p>例如: myc01.component.ts 名字是myc01, 作用是组件component, 代码类型ts文件</p>
<p>首先是在App文件目录下创建文件夹myc01</p>
<p><img src="https://img2020.cnblogs.com/blog/1770052/202104/1770052-20210428093636176-1936310836.png" alt="" width="227" height="131" loading="lazy"></p>
<p> </p>
<p> 然后创建在该文件夹下创建3个文件 分别为app.component.css,app.component.ts ,app.component.html</p>
<p><img src="https://img2020.cnblogs.com/blog/1770052/202104/1770052-20210428094300528-145488117.png" alt="" width="322" height="52" loading="lazy"></p>
<p> </p>
<p> html文件</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_261c0f67-32f2-4b2c-90b9-3442c74c0833" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_261c0f67-32f2-4b2c-90b9-3442c74c0833" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_261c0f67-32f2-4b2c-90b9-3442c74c0833" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">h1</span><span style="color: rgba(0, 0, 255, 1)">></span>Hello, 我的第一个组件<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">h1</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> html文件就是 vue 的 template 区域 </span><span style="color: rgba(0, 128, 0, 1)">--></span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>css文件就是相应的一些样式这里就不写出来了</p>
<p>ts文件</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_17e638ea-6b8e-4a0d-8dd6-182704bf265e" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_17e638ea-6b8e-4a0d-8dd6-182704bf265e" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_17e638ea-6b8e-4a0d-8dd6-182704bf265e" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 在之前 安装插件的 前提下:</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)"> ng-component</span>
import { Component, OnInit } from '@angular/core'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 在原生开发中, html文件是主文件, 运行的是html文件, 在html中引入了 其它的css和js文件
*
* 在NG开发中, ts文件是主文件, 在ts文件中引入html 和 css
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
@Component({
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 当前组件使用时的 标签名</span>
selector: 'app-myc01', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> <app-myc01></app-myc01></span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 引入关联的html</span>
templateUrl: './myc01.component.html'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 引入关联的css, 数组类型 说明可以引入多个css文件</span>
styleUrls: ['./myc01.component.css'<span style="color: rgba(0, 0, 0, 1)">],
})
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 类名要求:大驼峰, 即首字母大写</span>
<span style="color: rgba(0, 0, 0, 1)">export class Myc01Component implements OnInit {
constructor() {}
ngOnInit(): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {}
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 组件制作之后, 必须全局注册, 才能到 根组件中使用!</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)"> app.module.ts</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>最后需要在app.module.ts文件中注册组件</p>
<p>app.module.ts</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_5934d0d7-4132-44f4-8a2e-5d649e0b1681" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_5934d0d7-4132-44f4-8a2e-5d649e0b1681" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_5934d0d7-4132-44f4-8a2e-5d649e0b1681" class="cnblogs_code_hide">
<pre>import { NgModule } from '@angular/core'<span style="color: rgba(0, 0, 0, 1)">;
import { BrowserModule } from </span>'@angular/platform-browser'<span style="color: rgba(0, 0, 0, 1)">;
import { AppComponent } from </span>'./app.component'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 引入组件, 然后注册</span>
import { Myc01Component } from './myc01/myc01.component'<span style="color: rgba(0, 0, 0, 1)">;
import { Myc02Component } from </span>'./myc02/myc02.component'<span style="color: rgba(0, 0, 0, 1)">;
@NgModule({
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> declarations: 用于注册组件</span>
<span style="color: rgba(0, 0, 0, 1)">declarations: [
AppComponent, Myc01Component, Myc02Component
],
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> imports: 引入模块</span>
<span style="color: rgba(0, 0, 0, 1)">imports: [
BrowserModule
],
providers: [],
bootstrap:
})
export class AppModule { }</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>最后在根组件app.component.html中引用即可</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_1466fce0-647c-4799-a883-820b6e724ba1" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_1466fce0-647c-4799-a883-820b6e724ba1" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_1466fce0-647c-4799-a883-820b6e724ba1" class="cnblogs_code_hide">
<pre><h1>HELlo word</h1>
<!-- 组件01 -->
<app-myc01></app-myc01>
<!-- 组件02 -->
<app-myc02></app-myc02></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<h2>快捷命令________________________</h2>
<p>官方为了提高程序员的工作效率, 对很多操作提供了快捷的命令</p>
<p>项目启动命令:</p>
<div class="cnblogs_code">
<pre>ng serve --<span style="color: rgba(0, 0, 0, 1)">open : 启动服务 并 在默认浏览器自动打开
简化: ng s </span>-o</pre>
</div>
<p>生成组件命令</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">g generate component 组件名
generate: 生成
component: 组件
简化:
ng g c 组件名</span></pre>
</div>
<p>例如: ng g c myc03</p>
<p><img src="https://img2020.cnblogs.com/blog/1770052/202104/1770052-20210428101200426-2117982064.png" alt="" loading="lazy"></p>
<p> 这种快捷方式会给app文件夹生成对应文件 并且会在app.module.ts中自动引入该组件</p>
<h2>插值 __________________________________</h2>
<p>把 js 代码中的变量, 插入到 html 代码中: {{}}</p>
<p>在组件ts文件中定义一些数据</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_2e37c24a-5255-485c-98db-cf18e00f21d8" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_2e37c24a-5255-485c-98db-cf18e00f21d8" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_2e37c24a-5255-485c-98db-cf18e00f21d8" class="cnblogs_code_hide">
<pre>import { Component, OnInit } from '@angular/core'<span style="color: rgba(0, 0, 0, 1)">;
@Component({
selector: </span>'app-myc03'<span style="color: rgba(0, 0, 0, 1)">,
templateUrl: </span>'./myc03.component.html'<span style="color: rgba(0, 0, 0, 1)">,
styleUrls: [</span>'./myc03.component.css'<span style="color: rgba(0, 0, 0, 1)">],
})
export class Myc03Component implements OnInit {
name </span>= '天天'<span style="color: rgba(0, 0, 0, 1)">;
age </span>= 33<span style="color: rgba(0, 0, 0, 1)">;
married </span>= <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
skills </span>= ['vue', 'dom', 'axios', 'vue3.0'<span style="color: rgba(0, 0, 0, 1)">];
boss </span>= { name: '天霸', age: 39<span style="color: rgba(0, 0, 0, 1)"> };
constructor() {}
ngOnInit(): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {}
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 面向对象</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)"> class Demo {</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)"> name = '东东';</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)"> }</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 对象</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)"> const obj = {</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)"> name: '东东',</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)"> };</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>组件的HTML文件中用插值语法</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_f937d2cf-a152-4a30-b5ee-72e36cfe6187" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_f937d2cf-a152-4a30-b5ee-72e36cfe6187" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_f937d2cf-a152-4a30-b5ee-72e36cfe6187" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">p</span><span style="color: rgba(0, 0, 255, 1)">></span>myc03 works!<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">p</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ name }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ age }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ married }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ skills }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ boss }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ skills }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ boss.age }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 支持各种运算符 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ age + 4 }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ age - 4 }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ age * 4 }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ age / 4 }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ age % 4 }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 比较运算符 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ age > 5 }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ age >= 5 }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ age <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)"> 5 </span><span style="color: rgba(255, 0, 0, 1)">}}</li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ age <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">= 5 </span><span style="color: rgba(255, 0, 0, 1)">}}</li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ age == 5 }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ age != 5 }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">
逻辑运算符
&& 逻辑与全真则真,有假为假
|| 逻辑或全假为假,有真则真
!逻辑非非真为假,非假为真
</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ true && true }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ true && false }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ true || false }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ false || false }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ !true }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ !false }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 三目运算符 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ age > 18 ? "成年" : "未成年" }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ married ? "已婚" : "未婚" }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 调用对象方法 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ skills.toUpperCase() }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> </p>
<h2>属性绑定_________________________</h2>
<p>快捷生成组件 ng g c myc04</p>
<p>在组件ts文件中定义一些数据</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_07bc4e1c-0da3-43e8-abd2-3abfb5a928aa" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_07bc4e1c-0da3-43e8-abd2-3abfb5a928aa" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_07bc4e1c-0da3-43e8-abd2-3abfb5a928aa" class="cnblogs_code_hide">
<pre>import { Component, OnInit } from '@angular/core'<span style="color: rgba(0, 0, 0, 1)">;
@Component({
selector: </span>'app-myc04'<span style="color: rgba(0, 0, 0, 1)">,
templateUrl: </span>'./myc04.component.html'<span style="color: rgba(0, 0, 0, 1)">,
styleUrls: [</span>'./myc04.component.css'<span style="color: rgba(0, 0, 0, 1)">],
})
export class Myc04Component implements OnInit {
href1 </span>= 'http://www.baidu.com'<span style="color: rgba(0, 0, 0, 1)">;
href2 </span>= 'http://www.bilibili.com'<span style="color: rgba(0, 0, 0, 1)">;
constructor() {}
ngOnInit(): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>组件的HTML文件中用属性绑定语法</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_899565b4-7ab2-441a-a2a1-4b64e4ff7b80" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_899565b4-7ab2-441a-a2a1-4b64e4ff7b80" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_899565b4-7ab2-441a-a2a1-4b64e4ff7b80" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">p</span><span style="color: rgba(0, 0, 255, 1)">></span>myc04 works!<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">p</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">
在vue中:
:href="href1"
在NG中:
[属性名]="值"
</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">a </span><span style="color: rgba(255, 0, 0, 1)"></span><span style="color: rgba(0, 0, 255, 1)">="href1"</span><span style="color: rgba(0, 0, 255, 1)">></span>百度<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">br </span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 也支持插值方式 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">a </span><span style="color: rgba(255, 0, 0, 1)">href</span><span style="color: rgba(0, 0, 255, 1)">="{{ href2 }}"</span><span style="color: rgba(0, 0, 255, 1)">></span>哔哩哔哩<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">a</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 如果是带有类型的值, 必须用 [] </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 区分: false 和 'false' 绝对不一样, 'false'是字符串类型, 隐式转换为真 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 此写法是 html 代码写法, 在html中都是字符串类型 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">hr </span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">disabled</span><span style="color: rgba(0, 0, 255, 1)">="true"</span><span style="color: rgba(0, 0, 255, 1)">></span>不可用按钮<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">disabled</span><span style="color: rgba(0, 0, 255, 1)">="false"</span><span style="color: rgba(0, 0, 255, 1)">></span>可用按钮<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">hr </span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> [属性名]="js代码"js代码中才有数据类型的概念 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)"></span><span style="color: rgba(0, 0, 255, 1)">="true"</span><span style="color: rgba(0, 0, 255, 1)">></span>不可用按钮<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)"></span><span style="color: rgba(0, 0, 255, 1)">="false"</span><span style="color: rgba(0, 0, 255, 1)">></span>可用按钮<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<h2>事件_________________________________</h2>
<p>快捷生成组件 ng g c myc05</p>
<p>vue中: v-on:事件名="方法名" 或者 @事件名="方法名"</p>
<p>在组件ts文件中定义一些事件函数</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_03feed5b-d786-469a-bda5-4c623ea6451f" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_03feed5b-d786-469a-bda5-4c623ea6451f" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_03feed5b-d786-469a-bda5-4c623ea6451f" class="cnblogs_code_hide">
<pre>import { Component, OnInit } from '@angular/core'<span style="color: rgba(0, 0, 0, 1)">;
@Component({
selector: </span>'app-myc05'<span style="color: rgba(0, 0, 0, 1)">,
templateUrl: </span>'./myc05.component.html'<span style="color: rgba(0, 0, 0, 1)">,
styleUrls: [</span>'./myc05.component.css'<span style="color: rgba(0, 0, 0, 1)">],
})
export class Myc05Component implements OnInit {
num </span>= 1<span style="color: rgba(0, 0, 0, 1)">;
doAdd() {
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.num++<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> react,小程序:setState 或 setData主动触发刷新</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> vue,angular: 自动检测数据变化, 更新DOM</span>
<span style="color: rgba(0, 0, 0, 1)">}
constructor() {}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 这里不是React, 没有this指向问题</span>
<span style="color: rgba(0, 0, 0, 1)">show() {
alert(</span>'啊,疼!'<span style="color: rgba(0, 0, 0, 1)">);
}
ngOnInit(): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>组件的HTML文件中用利用事件触发事件函数</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_745596d6-ca01-4da1-8787-6e6d37f09e6b" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_745596d6-ca01-4da1-8787-6e6d37f09e6b" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_745596d6-ca01-4da1-8787-6e6d37f09e6b" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">p</span><span style="color: rgba(0, 0, 255, 1)">></span>myc05 works!<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">p</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> vue中: @click="show" </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> NG中: (事件名)="方法名()" 方法名必须带()结尾</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">(click)</span><span style="color: rgba(0, 0, 255, 1)">="show()"</span><span style="color: rgba(0, 0, 255, 1)">></span>点我<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">hr </span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">(click)</span><span style="color: rgba(0, 0, 255, 1)">="doAdd()"</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ num }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<h2>双向数据绑定_____________________________</h2>
<p>快捷生成组件 ng g c myc06</p>
<p>vue中: <input v-model='属性' /></p>
<p>在组件ts文件中定义一些数据</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_2f3c7079-0e61-41eb-a60b-b36b0d04cafe" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_2f3c7079-0e61-41eb-a60b-b36b0d04cafe" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_2f3c7079-0e61-41eb-a60b-b36b0d04cafe" class="cnblogs_code_hide">
<pre>import { Component, OnInit } from '@angular/core'<span style="color: rgba(0, 0, 0, 1)">;
@Component({
selector: </span>'app-myc06'<span style="color: rgba(0, 0, 0, 1)">,
templateUrl: </span>'./myc06.component.html'<span style="color: rgba(0, 0, 0, 1)">,
styleUrls: [</span>'./myc06.component.css'<span style="color: rgba(0, 0, 0, 1)">],
})
export class Myc06Component implements OnInit {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">定义个name 举例</span>
name = 'comeintobud'<span style="color: rgba(0, 0, 0, 1)">;
constructor() {}
ngOnInit(): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>在使用用双向绑定之前需要在app.module.ts中引入模块</p>
<p><img src="https://img2020.cnblogs.com/blog/1770052/202104/1770052-20210428111509065-2051095331.png" alt="" width="340" height="282" loading="lazy"></p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_8fb0e76e-5ca2-4738-b569-5bd00e8ee5a4" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_8fb0e76e-5ca2-4738-b569-5bd00e8ee5a4" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_8fb0e76e-5ca2-4738-b569-5bd00e8ee5a4" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 引入 Forms 模块</span>
import { FormsModule } from '@angular/forms'<span style="color: rgba(0, 0, 0, 1)">;
@NgModule({
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> declarations: 用于注册组件</span>
<span style="color: rgba(0, 0, 0, 1)"> declarations: [],
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> imports: 引入模块</span>
<span style="color: rgba(0, 0, 0, 1)"> imports: ,
providers: [],
bootstrap: ,
})
export class AppModule {}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>组件的HTML文件中使用双向绑定对数据做更改</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_32b65ca8-3233-497d-94d6-7e3159b38d6d" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_32b65ca8-3233-497d-94d6-7e3159b38d6d" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_32b65ca8-3233-497d-94d6-7e3159b38d6d" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">p</span><span style="color: rgba(0, 0, 255, 1)">></span>myc06 works!<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">p</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">
双向数据绑定:
vue中: v-model
NG中: [(ngModel)]="值",快捷提示: ng-model
</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 关注: 默认双向绑定模块没有加载, 无法使用. </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 需要: 到 app.module.ts 中进行加载 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">input </span><span style="color: rgba(255, 0, 0, 1)">type</span><span style="color: rgba(0, 0, 255, 1)">="text"</span><span style="color: rgba(255, 0, 0, 1)"> [(ngModel)]</span><span style="color: rgba(0, 0, 255, 1)">="name"</span> <span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">p</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ name }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">p</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<h2> 特殊属性_______________________</h2>
<p>快捷生成组件 ng g c myc07</p>
<p>网页内容: vue中: v-html</p>
<p>在组件ts文件中定义一些数据</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_d83385eb-0fb0-4b56-9c6d-f2588cae7ffd" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_d83385eb-0fb0-4b56-9c6d-f2588cae7ffd" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_d83385eb-0fb0-4b56-9c6d-f2588cae7ffd" class="cnblogs_code_hide">
<pre>import { Component, OnInit } from '@angular/core'<span style="color: rgba(0, 0, 0, 1)">;
@Component({
selector: </span>'app-myc07'<span style="color: rgba(0, 0, 0, 1)">,
templateUrl: </span>'./myc07.component.html'<span style="color: rgba(0, 0, 0, 1)">,
styleUrls: [</span>'./myc07.component.css'<span style="color: rgba(0, 0, 0, 1)">],
})
export class Myc07Component implements OnInit {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">希望将h1编译成浏览器样式</span>
data = '<h1>Hello World!</h1>'<span style="color: rgba(0, 0, 0, 1)">;
constructor() {}
ngOnInit(): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>在组件的HTML文件中编译网页内容</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_4410de72-387b-4844-aec1-6b25863976f0" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_4410de72-387b-4844-aec1-6b25863976f0" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_4410de72-387b-4844-aec1-6b25863976f0" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">p</span><span style="color: rgba(0, 0, 255, 1)">></span>myc07 works!<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">p</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 插值写法: innerText </span><span style="color: rgba(0, 128, 0, 1)">--></span><span style="color: rgba(0, 0, 0, 1)">
{{ data }}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">
vue中: v-html="data"
NG 中: ="data"
</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)"></span><span style="color: rgba(0, 0, 255, 1)">="data"</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<h2>动态样式_______________________</h2>
<p>vue中:</p>
<p>:style="{样式名: 值}"</p>
<p>:class="{样式类名: true/false}" true生效 false无效</p>
<p>快捷生成组件 ng g c myc08</p>
<p>在组件ts文件中定义一些数据</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_7f6b975b-7f14-4eb4-9427-77aef90ff94a" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_7f6b975b-7f14-4eb4-9427-77aef90ff94a" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_7f6b975b-7f14-4eb4-9427-77aef90ff94a" class="cnblogs_code_hide">
<pre>import { Component, OnInit } from '@angular/core'<span style="color: rgba(0, 0, 0, 1)">;
@Component({
selector: </span>'app-myc08'<span style="color: rgba(0, 0, 0, 1)">,
templateUrl: </span>'./myc08.component.html'<span style="color: rgba(0, 0, 0, 1)">,
styleUrls: [</span>'./myc08.component.css'<span style="color: rgba(0, 0, 0, 1)">],
})
export class Myc08Component implements OnInit {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">动态样式初始值</span>
size = 17<span style="color: rgba(0, 0, 0, 1)">;
constructor() { }
ngOnInit(): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> { }
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>组件的HTML中写动态样式</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_7bd42525-ed7e-4a9a-a1dc-e474fcd2d102" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_7bd42525-ed7e-4a9a-a1dc-e474fcd2d102" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_7bd42525-ed7e-4a9a-a1dc-e474fcd2d102" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">p</span><span style="color: rgba(0, 0, 255, 1)">></span>myc08 works!<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">p</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 点击时, 执行 "" 中的代码 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">(click)</span><span style="color: rgba(0, 0, 255, 1)">="size = size + 1"</span><span style="color: rgba(0, 0, 255, 1)">></span>变大{{ size }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">
vue中:
:style="{fontSize: size+'px'}"
NG中:
="{fontSize: size+'px'}"
</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">="color: aqua"</span><span style="color: rgba(255, 0, 0, 1)"> </span><span style="color: rgba(0, 0, 255, 1)">="{ fontSize: size + 'px' }"</span><span style="color: rgba(0, 0, 255, 1)">></span>Hello<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 通过条件, 显示不同的class</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">
vue: :class="{样式类名: true/false}"
NG : ="{样式类名:true/false}" true生效 false无效
</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)"></span><span style="color: rgba(0, 0, 255, 1)">="{ success: size > 20 && size < 30, danger: size >= 30 }"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
Hello Class
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>在css文件中定义样式便于动态绑定类</p>
<p><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_13a27973-f737-4083-a959-ef0aad4c03e3" class="code_img_closed" style="font-family: "Courier New"; font-size: 12px; font-style: italic"><span class="cnblogs_code_collapse" style="font-family: "Courier New"; font-size: 12px; font-style: italic">View Code</span></p>
<h2> 条件判断_________________</h2>
<p>vue中: v-if v-else :本质上是 切换 DOM 的 添加和移除. 消耗更多的资源, 适合不频繁的切换</p>
<p>对应</p>
<p>v-show: 本质是切换 css 的 display 属性, 利用css实现元素的隐藏; 消耗资源少, 适合频繁切换.</p>
<p>快捷生成组件 ng g c myc09</p>
<p>HTML文件</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_baa76fa0-982b-4ecc-9b7d-197e7b3b2e1f" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_baa76fa0-982b-4ecc-9b7d-197e7b3b2e1f" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_baa76fa0-982b-4ecc-9b7d-197e7b3b2e1f" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">(click)</span><span style="color: rgba(0, 0, 255, 1)">="score = score - 10"</span><span style="color: rgba(255, 0, 0, 1)"> </span><span style="color: rgba(0, 0, 255, 1)">="score == 0"</span><span style="color: rgba(0, 0, 255, 1)">></span>减10分<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">(click)</span><span style="color: rgba(0, 0, 255, 1)">="score = score + 10"</span><span style="color: rgba(255, 0, 0, 1)"> </span><span style="color: rgba(0, 0, 255, 1)">="score == 100"</span><span style="color: rgba(0, 0, 255, 1)">></span>加10分<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">h4</span><span style="color: rgba(0, 0, 255, 1)">></span>分数:{{ score }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">h4</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">
vue: v-if
NG : *ngIf 快捷键 ng-if
</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">*ngIf</span><span style="color: rgba(0, 0, 255, 1)">="score < 60"</span><span style="color: rgba(0, 0, 255, 1)">></span>很遗憾, 您的成绩不及格!<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">*ngIf</span><span style="color: rgba(0, 0, 255, 1)">="score >= 60 && score < 80"</span><span style="color: rgba(0, 0, 255, 1)">></span>及格了, 但是仍要继续努力.<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">*ngIf</span><span style="color: rgba(0, 0, 255, 1)">="score >= 80"</span><span style="color: rgba(0, 0, 255, 1)">></span>优秀 优秀!<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> ng-if-else: 使用较少, 因为 if 可以解决大多数问题 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">ng-container </span><span style="color: rgba(255, 0, 0, 1)">*ngIf</span><span style="color: rgba(0, 0, 255, 1)">="score < 60; else xyz"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(0, 0, 255, 1)">></span>很遗憾, 您的成绩不及格!<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">ng-container</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> # 就是id, 用来做唯一标识 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">ng-template </span><span style="color: rgba(255, 0, 0, 1)">#xyz</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(0, 0, 255, 1)">></span>恭喜, 及格了!<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">ng-template</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<h2>列表渲染______________________</h2>
<p>vue中: v-for="(item,index) in arr" :key="index"</p>
<p>快捷生成组件 ng g c myc10</p>
<p>ts文件定义数据和函数</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_4c57661d-550b-41ce-bdf3-b04035c52e76" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_4c57661d-550b-41ce-bdf3-b04035c52e76" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_4c57661d-550b-41ce-bdf3-b04035c52e76" class="cnblogs_code_hide">
<pre>import { Component, OnInit } from '@angular/core'<span style="color: rgba(0, 0, 0, 1)">;
@Component({
selector: </span>'app-myc12'<span style="color: rgba(0, 0, 0, 1)">,
templateUrl: </span>'./myc12.component.html'<span style="color: rgba(0, 0, 0, 1)">,
styleUrls: [</span>'./myc12.component.css'<span style="color: rgba(0, 0, 0, 1)">]
})
export class Myc12Component implements OnInit {
data </span>= ['vue', 'angular', 'react', 'ionic', 'jQuery', 'uniapp'<span style="color: rgba(0, 0, 0, 1)">];
teachers </span>=<span style="color: rgba(0, 0, 0, 1)"> [
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 数据项必须自带唯一标识id, 才能配合 trackBy 使用 </span>
{ id: 0, name: '亮亮'<span style="color: rgba(0, 0, 0, 1)"> },
{ id: </span>1, name: '然然'<span style="color: rgba(0, 0, 0, 1)"> },
{ id: </span>2, name: '东东'<span style="color: rgba(0, 0, 0, 1)"> },
{ id: </span>3, name: '铭铭'<span style="color: rgba(0, 0, 0, 1)"> },
{ id: </span>4, name: '小新'<span style="color: rgba(0, 0, 0, 1)"> },
];
trackFunc </span>= (index, item) =><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> item.id;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> return index; 也可以 </span>
<span style="color: rgba(0, 0, 0, 1)">};
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 自定义函数 把数字转数组 </span>
<span style="color: rgba(0, 0, 0, 1)">range(num: number) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> TypeScript: 静态类型声明 </span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> num: number 代表 参数num 是数字类型 </span>
const arr =<span style="color: rgba(0, 0, 0, 1)"> [];
</span><span style="color: rgba(0, 0, 255, 1)">for</span> (let i = 1; i <= num; i++<span style="color: rgba(0, 0, 0, 1)">) {
arr.push(i);
}
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> arr;
}
constructor() { }
ngOnInit(): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {
}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>HTML文件渲染</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_eb665fa7-5f30-4bb8-8239-c07bec6f500b" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_eb665fa7-5f30-4bb8-8239-c07bec6f500b" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_eb665fa7-5f30-4bb8-8239-c07bec6f500b" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">
vue中:
<li v-for="(item,index) in data" :key="index">{{item}}</li>
</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li </span><span style="color: rgba(255, 0, 0, 1)">*ngFor</span><span style="color: rgba(0, 0, 255, 1)">="let item of data"</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ item }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li </span><span style="color: rgba(255, 0, 0, 1)">*ngFor</span><span style="color: rgba(0, 0, 255, 1)">="let item of data; let i = index"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">span</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ i }}--<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">span</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">span</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ item }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">span</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> angular: 不强制写 key 作为列表内容的唯一标识 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 只有出现删除这类操作时, 推荐使用 key 来提升效率 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> angular中不是key 而是 trackBy </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> trackBy: 值是一个函数, 此函数默认接受两个参数, 分别是 序号 和 item
此函数返回一个值, 作为唯一标识使用
</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li </span><span style="color: rgba(255, 0, 0, 1)">*ngFor</span><span style="color: rgba(0, 0, 255, 1)">="let item of teachers; trackBy: trackFunc"</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
{{ item.name }}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">*ngFor</span><span style="color: rgba(0, 0, 255, 1)">="let item of range(4)"</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ item }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> </p>
<p>综上写个例子</p>
<p>快捷生成组件 ng g c work</p>
<p>ts文件</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_b68d7dc5-ed09-43ac-bef3-86cf831e62ac" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_b68d7dc5-ed09-43ac-bef3-86cf831e62ac" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_b68d7dc5-ed09-43ac-bef3-86cf831e62ac" class="cnblogs_code_hide">
<pre>import { Component, OnInit } from '@angular/core'<span style="color: rgba(0, 0, 0, 1)">;
@Component({
selector: </span>'app-work'<span style="color: rgba(0, 0, 0, 1)">,
templateUrl: </span>'./work.component.html'<span style="color: rgba(0, 0, 0, 1)">,
styleUrls: [</span>'./work.component.css'<span style="color: rgba(0, 0, 0, 1)">],
})
export class WorkComponent implements OnInit {
todo </span>= ''<span style="color: rgba(0, 0, 0, 1)">;
todoList </span>= ['吃饭', '睡觉', '打亮亮'<span style="color: rgba(0, 0, 0, 1)">];
doAdd() {
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.todoList.push(<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.todo);
</span><span style="color: rgba(0, 0, 255, 1)">this</span>.todo = ''<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> TypeScript: 静态类型声明</span>
<span style="color: rgba(0, 0, 0, 1)">doDel(index: number) {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> splice(a,b,c): 从序号a位置删除b个元素, 把c元素加入到a位置</span>
<span style="color: rgba(0, 0, 255, 1)">this</span>.todoList.splice(index, 1<span style="color: rgba(0, 0, 0, 1)">);
}
constructor() {}
ngOnInit(): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {}
}</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>HTML文件(注意双向绑定需要在app.module.ts中引入FromModule模块)</p>
<div class="cnblogs_code"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_2dfd8214-5162-4dd9-9546-3a0e9b6d3350" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_2dfd8214-5162-4dd9-9546-3a0e9b6d3350" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_2dfd8214-5162-4dd9-9546-3a0e9b6d3350" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 双向绑定:必须手动到 app.module.ts 中注册 Forms 模块 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">input </span><span style="color: rgba(255, 0, 0, 1)">type</span><span style="color: rgba(0, 0, 255, 1)">="text"</span><span style="color: rgba(255, 0, 0, 1)"> placeholder</span><span style="color: rgba(0, 0, 255, 1)">="请输入待办事项"</span><span style="color: rgba(255, 0, 0, 1)"> [(ngModel)]</span><span style="color: rgba(0, 0, 255, 1)">="todo"</span> <span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)"></span><span style="color: rgba(0, 0, 255, 1)">="todo.trim().length == 0"</span><span style="color: rgba(255, 0, 0, 1)"> (click)</span><span style="color: rgba(0, 0, 255, 1)">="doAdd()"</span><span style="color: rgba(0, 0, 255, 1)">></span>确定<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">li </span><span style="color: rgba(255, 0, 0, 1)">*ngFor</span><span style="color: rgba(0, 0, 255, 1)">="let item of todoList; let i = index"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">span</span><span style="color: rgba(0, 0, 255, 1)">></span>{{ item }}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">span</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">(click)</span><span style="color: rgba(0, 0, 255, 1)">="doDel(i)"</span><span style="color: rgba(255, 0, 0, 1)"> style</span><span style="color: rgba(0, 0, 255, 1)">="margin-left: 50px"</span><span style="color: rgba(0, 0, 255, 1)">></span>删除<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">li</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">ul</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">h3 </span><span style="color: rgba(255, 0, 0, 1)">*ngIf</span><span style="color: rgba(0, 0, 255, 1)">="todoList.length == 0"</span><span style="color: rgba(0, 0, 255, 1)">></span>暂无待办事项<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> if是通过操作 DOM 的删除来实现隐藏, 效率低 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> 利用 css的 display:none; 实现隐藏效率高 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> hidden: 隐藏 </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">h3 </span><span style="color: rgba(255, 0, 0, 1)"></span><span style="color: rgba(0, 0, 255, 1)">="todoList.length != 0"</span><span style="color: rgba(0, 0, 255, 1)">></span>暂无待办事项<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> </p><br><br>
来源:https://www.cnblogs.com/CIBud/p/14713003.html
頁:
[1]