angular 需要在node.js V10.9 以上版本使用
npm i -g @angular/cli
ng new myngapp01
- cd myngapp01
-
- npm start 或者 执行 ng serve
http://localhost:4200
1.angular.json : NG 项目的配置
index:"./src/index.html" ==>
main:"./src/main.ts" ==> 项目打包的入口文件
2.main.js > bootstrapModule(AppModule) ==> 引导项目启动
3.app.module.ts > bootstrap:[AppComponent]
4.app.component.ts > selector:"app-root"
> templateUrl:'app.app.componet.html'
5.app.component.html > HTML 片段
在终端,输入 npx ng g component 组件名,自动创建组件
在Angular 中,组件必须放在模块中,否则无法使用;
1)组件(component) = 模板(template)+ 脚本(Script) + 样式(style)
2)也可以将组件中的 模板和样式全部拆分出来
模板:templateUrl:'路径'
样式:styleUrls:["路径”]
3)在终端,输入 npx ng g component 组件名,可以一次性创建出组件(包括模板+脚本+样式)
1.创建组件 class
==> 在app包中,创建.ts组件
- // 创建组件
- @Component({
- template: "
这是我的第一个组件mycom
", - selector:'mycom'
- })
- export class MyComponent {}
2.在某个模块中注册组件class
==> app.module.ts > import { 组件名 } from '路径' 引入模块
> 在模块中声明注册模块
- // 引入 MyComponent 组件
- import { MyComponent } from './mycom';
-
- // 模块
- @NgModule({
- // 声明注册组件
- declarations: [
- AppComponent,
- MyComponent
- ],
- imports: [
- BrowserModule,
- AppRoutingModule
- ],
- providers: [],
- bootstrap: [AppComponent]
- })
3.使用组件
在app.component.html 中使用 组件,组件标签名为在组件中 selector 定义的名字
我的Angular项目
- <mycom>mycom>
(1)HTML绑定 ==> 可以使用 表达式运算;和VUE一样;
(2)属性绑定 ==> 形式1:直接在属性上用{{}}
形式2:使用中括号
注意:属性动态绑定的时候,需要做字符串拼接,如:
(3)事件绑定 ==> 在 html 文件中的标签上,使用(click)= "printFn()"
==> 在 组件.ts文件中,export class 类中,写对象的函数;
注意:在Angular 中,事件必须加小括号;
Angular 中得指令分为三类:
(1)结构性指令:会影响 DOM 结构得,使用 * 号开头,如 *ngIf *ngSwitchCase
(2)属性型指令:不会影响DOM 结构,知识影响元素得外观行为,使用中括号 [] ,如[ngClass] , [ngSwitch]
Angular 中的指令,使用 *ngFor || [ ngStyle ]这中方法来书写
*ngFor= " let item of items; index as i "
注意:else 对应得模板必须使用
- <div *ngIf=" age >= 18 ;else forChildren">
- 此处是家长看到的内容。。。
- div>
- <ng-template #forChildren>
- <p>此处是孩子看的内容。。。p>
- ng-template>
class得动态绑定==> [ngClass] = " obj "
==> obj 在 .ts 脚本文件中 编辑,obj 对象得 内容 :key 为 .css 文件中得类选择器名,value为true 或者 false ;表示选中改样式,或者不选
- // .html 模板文件
- "myClassObj" (click)="changeClass()">
- class得动态绑定
-
- // .scss 样式文件
- .bg {
- width: 200px;
- height: 200px;
- background-color: #efefef;
- }
- .bd{
- border: 1px solid red;
- border-radius: 5px;
- }
- .fs{
- font-size: 36px;
- font-weight: 700;
- }
-
- // .ts 脚本文件
- export class Mycom06NgStyleComponent implements OnInit {
- myClassObj = {
- bg: true,
- fs: true,
- bd: true
- }
- changeClass(){
- this.myClassObj.fs = !this.myClassObj.fs
- };
- }
- " leave ">
- <div *ngSwitchCase=" 'nomal' ">普通用户div>
- <div *ngSwitchCase=" 'vip' ">贵宾用户div>
- <div *ngSwitchCase=" 'godalVip' ">黑金用户div>
- <div *ngSwitchDefault>请登录div>
方向1:Model => View ,模型改变视图,用[]绑定
方向2:View => Model ,视图改变模型,用()绑定
所以 ngModel 使用 [ (ngModel) ]
注意:想要使用 ngModel 指令,必须在主模块 app.module.ts 文件中 导入 FormsModule 模块哦
- import { FormsModule} from "@angular/forms"
- // 模块
- @NgModule({
- // 声明注册组件
- declarations: [
- AppComponent,
- MyComponent
- ],
- imports: [
- // 浏览器模块,只有用于web ,就要导入这个模块;包含了 common 模块
- BrowserModule,
- // FormsModule 模块导入
- FormsModule,
- AppRoutingModule
- ],
- providers: [],
- bootstrap: [AppComponent]
- })
TIPS: 监听 model 改变事件 (ngModelChange)= " modelChange() "
这里得回调函数,比如可以用在搜索框中发送ajax请求;当用户输入时,发送请求,请求数据
- <input [(ngModel)]="usename" type="text" placeholder="请输入用户名" (ngModelChange)="usenameChange()">
Filter:过滤器,本质是一个函数,用来处理数据,再以新得格式进行输出
创建管道对象得简便工具:ng g pipe 管道名
说明:管道得 transform 方法除了val 形参,还可以接收其他得参数,调用管道时用冒号为这些参数赋值,例如 :{{ e.empSex | sex:'en' }}
- import { Pipe } from "@angular/core";
- // 管道 Pipe 装饰器
- @Pipe({
- name:'sex'
- })
- export class SexPipe {
- // 管道到执行过滤任务得是一个固定得函数
- // 相当于 filter 过滤器
- transform(val:number) {
- if (val == 1) {
- return '男'
- } else if (val == 0) {
- return '女'
- } else {
- return '未知'
- }
- }
- }
- import { SexPipe } from './sex.pipe';
- // 模块
- @NgModule({
- // 声明注册组件
- declarations: [
- // 注册管道
- SexPipe
- ],
- imports: [
- // 浏览器模块,只有用于web ,就要导入这个模块;包含了 common 模块
- BrowserModule,
- // FormsModule 模块导入
- FormsModule,
- AppRoutingModule
- ],
- providers: [],
- bootstrap: [AppComponent]
- })
- <table>
- <thead>
- <tr>
- <th>IDth>
- <th>姓名th>
- <th>工资th>
- <th>性别th>
- <th>年龄th>
- tr>
- thead>
- <tbody>
- <tr *ngFor="let item of employList">
- <td>{{ item.id }}td>
- <td>{{ item.name }}td>
- <td>{{ item.salay }}td>
- // 这里直接使用 管道得name:'sex' ,来自自动处理数据
- <td>{{ item.sex | sex }}td>
- <td>{{ item.age }}td>
- tr>
- tbody>
- table>
(1) lowercase :转换为小写,{{ uname | lowercase }}
(2)uppercase :转换为大写,{{ uname | uppercase }}
(3)titlecase :转换为首字母大写 ,{{ uname | titlecase }}
(4)slice :字符串截取,{{ ename | slice:start [ :end ] }} start 为截取开始得下标,end为截取结束得下标
(5)json :把JS对象转化为JSON 字符串,{{ obj | json }}
(6)number:对数字进行处理,转为指定得整数和小数 位数,
{{ num | number }} {{ num | number :'4.2-2' }} 4表示整数位数至少是4位(不够4位自动补0),点2表示小数位最少为2位,-2表示,小数位最多有2位;
(7)currency :把数字转换位货币格式字符串:{{ slary | currency:'¥' }}
(8)date :日期转换管道,转换时间戳字符串指定格式得日期:{{ str | date:'yyyy-MM-dd HH:mm:ss' }}
简化工具:ng g service 服务名
==> 方式1:手动创建式 let obj = new Car()
==> 方式2:依赖注入式 不需要自己new,只需要声明依赖;服务提供者就会创建被依赖得对象,注入给声明依赖者
1)创建服务对象并指定服务提供者,在log.service.ts文件中创建服务对象,并导出
- import { Injectable } from "@angular/core";
- // 装饰器
- // 所以得服务对象都是被注入得
- @Injectable({
- // 指定当前服务对象在 "根模块"中提供 --AppModule
- providedIn:'root'
- })
- export class LogService{
- doLog(action:string) {
- let uname = 'admin'
- let time = new Date().valueOf()
- // let action = '添加了新得商品:xxx'
- console.log(`管理员:${uname}时间:${time}动作:${action}`);
- }
- }
2)在组件中声明依赖,服务提供者就会自动注入,组件直接使用服务对象即可;
在构造器得形参中设置log得类型=服务名,可以直接获取依赖服务对象得方法函数,并赋值给变量,给后续函数来调用;
- import { LogService } from "../log.service";
- @Component({
- templateUrl: './mycom03.component.html',
- selector: 'mycom03',
- styleUrls:['./mycom03.component.css']
- })
- export class MyCom03Component implements OnInit{
- // 构造器
- log:LogService
- constructor(log: LogService) {
- console.log('log',log);
- this.log = log
- }
- addShop() {
- console.log('正在添加商品');
- let action = '添加了新得商品:xxx'
- this.log.doLog(action)
- }
- deleteShop() {
- console.log('正在删除商品');
- let action = '删除了商品:xxx'
- this.log.doLog(action)
- }
- }
HttpClient Service 服务对象用于向指定得URL发起异步请求,使用步骤:
1)在主模块中导入HttpClient 服务所在得模块
在 app.module.ts中 import 导入HttpClientModule 模块;