• Angular 基础


    angular 需要在node.js V10.9 以上版本使用

    一、搭建angulaur 脚手架

    1.下载并安装脚手架工具

    npm i -g @angular/cli

    2.运行脚手架工具,创建空白项目

    ng new myngapp01

    3.进入空白项目并运行开发服务器

    1. cd myngapp01
    2. npm start 或者 执行 ng serve

    4.进入客户端访问测试

    http://localhost:4200

    二、Angular 项目启动过程分析

    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 片段

    三、Angular 核心概念:组件

    在终端,输入 npx ng g component 组件名,自动创建组件

    在Angular 中,组件必须放在模块中,否则无法使用;

    1)组件(component) = 模板(template)+ 脚本(Script) + 样式(style)

    2)也可以将组件中的 模板和样式全部拆分出来

            模板:templateUrl:'路径'

            样式:styleUrls:["路径”]

    3)在终端,输入 npx ng g component 组件名,可以一次性创建出组件(包括模板+脚本+样式)

    1.创建组件 class

            ==> 在app包中,创建.ts组件

    1. // 创建组件
    2. @Component({
    3. template: "

      这是我的第一个组件mycom

      "
      ,
    4. selector:'mycom'
    5. })
    6. export class MyComponent {}

    2.在某个模块中注册组件class

            ==> app.module.ts > import { 组件名 } from '路径'  引入模块

                                           > 在模块中声明注册模块

    1. // 引入 MyComponent 组件
    2. import { MyComponent } from './mycom';
    3. // 模块
    4. @NgModule({
    5. // 声明注册组件
    6. declarations: [
    7. AppComponent,
    8. MyComponent
    9. ],
    10. imports: [
    11. BrowserModule,
    12. AppRoutingModule
    13. ],
    14. providers: [],
    15. bootstrap: [AppComponent]
    16. })

    3.使用组件

    在app.component.html 中使用 组件,组件标签名为在组件中 selector 定义的名字

    1. 我的Angular项目


    2. <mycom>mycom>

    四、Angular核心概念之:数据绑定

    (1)HTML绑定 ==> 可以使用 表达式运算;和VUE一样;

    (2)属性绑定 ==> 形式1:直接在属性上用{{}}

                                    形式2:使用中括号 

    注意:属性动态绑定的时候,需要做字符串拼接,如:

    (3)事件绑定 ==> 在 html 文件中的标签上,使用(click)= "printFn()"

                            ==> 在 组件.ts文件中,export class 类中,写对象的函数;

    注意:在Angular 中,事件必须加小括号;

    五、Angular 指令系统 

    Angular 中得指令分为三类:

    (1)结构性指令:会影响 DOM 结构得,使用 * 号开头,如 *ngIf  *ngSwitchCase

    (2)属性型指令:不会影响DOM 结构,知识影响元素得外观行为,使用中括号 [] ,如[ngClass] , [ngSwitch]

    Angular 中的指令,使用 *ngFor  || [ ngStyle ]这中方法来书写

    (1)循环指令 使用 for-of 的方式;

    *ngFor= " let item of items; index as i "

    (2)条件渲染 使用 *ngIf=" 条件;else  代号 "

    注意:else 对应得模板必须使用 包裹

    1. <div *ngIf=" age >= 18 ;else forChildren">
    2. 此处是家长看到的内容。。。
    3. div>
    4. <ng-template #forChildren>
    5. <p>此处是孩子看的内容。。。p>
    6. ng-template>

    (3)样式绑定 [ngStyle]=" 变量|| 表达式 "

            class得动态绑定==> [ngClass] = " obj "

                    ==> obj 在 .ts 脚本文件中 编辑,obj 对象得 内容 :key 为 .css 文件中得类选择器名,value为true 或者 false ;表示选中改样式,或者不选

    1. // .html 模板文件
    2. "myClassObj" (click)="changeClass()">
    3. 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
  • };
  • }
  • (4)[ngSwitch] = " 表达式 " 

    1. " leave ">
    2. <div *ngSwitchCase=" 'nomal' ">普通用户div>
    3. <div *ngSwitchCase=" 'vip' ">贵宾用户div>
    4. <div *ngSwitchCase=" 'godalVip' ">黑金用户div>
    5. <div *ngSwitchDefault>请登录div>

(5)双向数据绑定  [(ngModel )] 

        方向1:Model => View ,模型改变视图,用[]绑定

        方向2:View => Model ,视图改变模型,用()绑定

所以 ngModel 使用  [ (ngModel) ]

注意:想要使用 ngModel 指令,必须在主模块 app.module.ts 文件中 导入 FormsModule 模块哦

  1. import { FormsModule} from "@angular/forms"
  2. // 模块
  3. @NgModule({
  4. // 声明注册组件
  5. declarations: [
  6. AppComponent,
  7. MyComponent
  8. ],
  9. imports: [
  10. // 浏览器模块,只有用于web ,就要导入这个模块;包含了 common 模块
  11. BrowserModule,
  12. // FormsModule 模块导入
  13. FormsModule,
  14. AppRoutingModule
  15. ],
  16. providers: [],
  17. bootstrap: [AppComponent]
  18. })

TIPS: 监听 model 改变事件 (ngModelChange)= "  modelChange() " 

        这里得回调函数,比如可以用在搜索框中发送ajax请求;当用户输入时,发送请求,请求数据

  1. <input [(ngModel)]="usename" type="text" placeholder="请输入用户名" (ngModelChange)="usenameChange()">

六、Angular 核心概念:过滤器(管道 Pipe)

Filter:过滤器,本质是一个函数,用来处理数据,再以新得格式进行输出

创建管道对象得简便工具:ng g pipe 管道名

1.自定义管道得步骤:

(1)创建管道 class 类,实现转换功能 ,在 xxx.pipe.ts 文件中创建管道

说明:管道得 transform 方法除了val 形参,还可以接收其他得参数,调用管道时用冒号为这些参数赋值,例如 :{{ e.empSex | sex:'en' }}

  1. import { Pipe } from "@angular/core";
  2. // 管道 Pipe 装饰器
  3. @Pipe({
  4. name:'sex'
  5. })
  6. export class SexPipe {
  7. // 管道到执行过滤任务得是一个固定得函数
  8. // 相当于 filter 过滤器
  9. transform(val:number) {
  10. if (val == 1) {
  11. return '男'
  12. } else if (val == 0) {
  13. return '女'
  14. } else {
  15. return '未知'
  16. }
  17. }
  18. }

(2)在模块中注册管道,app.module.ts 文件中注册管道

  1. import { SexPipe } from './sex.pipe';
  2. // 模块
  3. @NgModule({
  4. // 声明注册组件
  5. declarations: [
  6. // 注册管道
  7. SexPipe
  8. ],
  9. imports: [
  10. // 浏览器模块,只有用于web ,就要导入这个模块;包含了 common 模块
  11. BrowserModule,
  12. // FormsModule 模块导入
  13. FormsModule,
  14. AppRoutingModule
  15. ],
  16. providers: [],
  17. bootstrap: [AppComponent]
  18. })

(3)使用管道,在 模板文件 .html 文件中使用管道

  1. <table>
  2. <thead>
  3. <tr>
  4. <th>IDth>
  5. <th>姓名th>
  6. <th>工资th>
  7. <th>性别th>
  8. <th>年龄th>
  9. tr>
  10. thead>
  11. <tbody>
  12. <tr *ngFor="let item of employList">
  13. <td>{{ item.id }}td>
  14. <td>{{ item.name }}td>
  15. <td>{{ item.salay }}td>
  16. // 这里直接使用 管道得name:'sex' ,来自自动处理数据
  17. <td>{{ item.sex | sex }}td>
  18. <td>{{ item.age }}td>
  19. tr>
  20. tbody>
  21. table>

2.Angular 中得预定义得管道

(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' }}

七、Angular核心概念:服务和依赖注入

简化工具:ng g service 服务名

1.创建对象得两种方式

        ==> 方式1:手动创建式     let obj = new Car()

        ==> 方式2:依赖注入式     不需要自己new,只需要声明依赖;服务提供者就会创建被依赖得对象,注入给声明依赖者

2.创建服务对象得步骤:

1)创建服务对象并指定服务提供者,在log.service.ts文件中创建服务对象,并导出

  1. import { Injectable } from "@angular/core";
  2. // 装饰器
  3. // 所以得服务对象都是被注入得
  4. @Injectable({
  5. // 指定当前服务对象在 "根模块"中提供 --AppModule
  6. providedIn:'root'
  7. })
  8. export class LogService{
  9. doLog(action:string) {
  10. let uname = 'admin'
  11. let time = new Date().valueOf()
  12. // let action = '添加了新得商品:xxx'
  13. console.log(`管理员:${uname}时间:${time}动作:${action}`);
  14. }
  15. }

2)在组件中声明依赖,服务提供者就会自动注入,组件直接使用服务对象即可;

在构造器得形参中设置log得类型=服务名,可以直接获取依赖服务对象得方法函数,并赋值给变量,给后续函数来调用;

  1. import { LogService } from "../log.service";
  2. @Component({
  3. templateUrl: './mycom03.component.html',
  4. selector: 'mycom03',
  5. styleUrls:['./mycom03.component.css']
  6. })
  7. export class MyCom03Component implements OnInit{
  8. // 构造器
  9. log:LogService
  10. constructor(log: LogService) {
  11. console.log('log',log);
  12. this.log = log
  13. }
  14. addShop() {
  15. console.log('正在添加商品');
  16. let action = '添加了新得商品:xxx'
  17. this.log.doLog(action)
  18. }
  19. deleteShop() {
  20. console.log('正在删除商品');
  21. let action = '删除了商品:xxx'
  22. this.log.doLog(action)
  23. }
  24. }

八、Angular 官方提供得请求服务对象:HttpClient Service

HttpClient Service 服务对象用于向指定得URL发起异步请求,使用步骤:

1)在主模块中导入HttpClient 服务所在得模块

        在 app.module.ts中 import 导入HttpClientModule 模块;

  • 相关阅读:
    16数据结构与算法刷题之【滑动窗口】篇
    《你好,C语言》:从另一个视角学习并重新审视C语言的意义
    【Redis】缓存雪崩、穿透和击穿及解决方法
    mysql按照周统计数据
    Visual Studio 2022 版本 17.4 预览版 3 中对c++编译时优化的内容你都知道吗
    数据分析基础-数据可视化07-用数据分析讲故事
    CSS学习笔记
    linux挂载u盘及卸载
    08_SpingBoot 集成Redis
    centos rpm方式安装jenkins
  • 原文地址:https://blog.csdn.net/weixin_67642008/article/details/127594629