angular学习笔记

综述:最近一个公司项目使用了angular,总结下在代码中学到的东西,加深理解和认识  

1.部分代码分析?

  • node.proxy.ts文件的作用是?

一系列的get和set修饰的变量,实现对于数据变化的监控,以及当一个值变化时候,应该去干什么操作的记录。

  • param.proxy.ts的作用是?

一系列的get和set修饰的变量,实现对于数据变化的监控,以及当一个值变化时候,应该去干什么操作的记录。

  • plan.cache.ts作用是?

通过map数据结构来存储数据,实现数据的缓存。

  • plan.holder.ts作用?

集中维护数据的仓库,holder 保持住当前的数据。

[译] 认识 rxjs 中的 BehaviorSubject、ReplaySubject 以及 AsyncSubject_weixin_34265814的博客-CSDN博客

  • plan.model作用?

通过calss或者interface的形式来定义数据的结构。

  • src\app\cache.resolve.ts文件夹的作用是?

目前这个缓存文件只是引入到项目中,未应用,实际作用需要研究下。

2.core和share文件夹的区别是?如何使用?

share中的是可以直接复用的ui组件,core中则是可以复用的工具类,是逻辑层面的东西。

3.当前项目的配置文件是如何发挥作用的?和其他项目差别如此大?各个框架的实现思路差别非常大,黑心实现细节才是重点。

4.sys_params的作用?和后端的交互流程?

目前访问前端时候,是先去sys_params中定义的天眼的地址,天眼登录后带上登录信息,去部署的后端,后端拿到天眼的登录tickets之后,将认证信息保存下来,再返回到我们的前端地址就能访问我们的前端项目了。每次交互都需要带上交互的参数实现鉴权。

angular学习笔记:Angular教程_Angular8 Angular9 Angular12入门实战视频教程-2021年更新【IT营】_哔哩哔哩_bilibili

5.app.module.ts模块主要内容和作用是什么?

6.如何在一个组件中,引入另外一个组件并使用?

  以迁移一个向上的下拉组件为例子,将它迁移过来的顺序是:

  • 将另一个页面的上拉组件内容全部copy过来,复制到需要的页面的目录下
  • 在新的页面的module.ts文件种,imports 这个组件module
  • 在这个页面中就可以引用这个组件即刻
  • 在组件中去请求数据,将获取到的数据注入到相应的变量中即可 
    this.interfaceService.getInterfaceNetworkData().subscribe(rep => {
          console.log(rep, 9999)
    });

7.angular是如何实现他的数据集中管理的,和react,vue进行对比?

全局的数据统一维护在src\app\global.holder.ts中,通过订阅的方式,当数据修改时候触发相应的操作。

8.angular这些依赖分别是干什么作用的?OnInit · angular学习笔记 · 看云

  • @angular//animations 动画库
  • @angular/cdk=angular component development kit 组件开发配套包,cdk的目标是为开发人员提供更多的工具,以为网络构建出出色的组件,cdk由许多服务,指令,组件,类,模块等组成,使我们在开发angular组件时更轻松。
  • @angular/common  实现Angular框架的基本功能,包括指令和管道、路由中使用的位置服务、HTTP服务、本地化支持等

  • @angular/compiler   编译器是什么,简而言之就是开发者代码和最终运行时代码之间的一切工作

  • @angular/core    实现Angular的核心功能、底层服务和实用程序

  • @angular/forms  简单的来说下Angular Form表单,Form,是商业应用的支柱,一般,我们用它来登录、预定机票、安排会议等等一些数据录入任务。在Angular中构建表单的技术有两种:响应式表单模板驱动表单。它们都属于@angular/forms库,并且共享一组公共的表单控件类。但是在设计哲学、编程风格和具体技术有显著区别,所以他们有自己的模块:ReactiveFormsModuleFormsModule

  • @angular/localize   是一个新的包,它在 Ivy 应用中支持信息的 i18n,做国际化的

  • @angular/platform-browser

  • @angular/platform-browser-dynamic

  • @angular/router

  • @ng-bootstrap/ng-bootstrap

  • ace-diff :  This is a wrapper for Ace Editor to provide a 2-panel diffing/merging tool that visualizes differences in two documents and allows users to copy changes from to the other.

  • brace

  • date-fns

  • jsplumb

  • rxjs 是使用observable的响应式编程的库,它使编写异步或基于回调的代码更容易

  • summernote

  • tinycolor2

  • toastr

  • zone.js

9.  angular中怎样实现父子组件之间的通信?父组件如何向子组件传参数?

  • 在父组件中调用子组件时候,写好相应的方法 
  <ai-execute-env class="btn-wrapper" (test)="test($event)"></ai-execute-env>
  • 子组件调用父组件中的方法
     
    @Output() test = new EventEmitter(); //必须要引入这个,才会用作用?
    
    emitExecute(id: number): void {
         this.test.emit(id)
     }
  • 子组件中调用自己定义的方法

<button class="btn btn-primary" (click)="emitExecute(environments[0].intf_test_network_id)" *ngIf="environments.length === 1">测&#12288;试</button>

10.在angular中请求数据时候,subscribe的作用是?就是一个订阅者,订阅这个请求,当请求结束后需要执行的事情。

 this.interfaceService.getInterfaceNetworkData().subscribe(rep => {
           this.environments = rep
 });    

11.xtend和implement的主要区别是,implement改变了类的prototype属性,而extend只是新建了一个副本。这意味着如果你通过implement对类做了改变,那将改变他的所有实例,而通过extend改变类的话,不会改变在此之前存在的实例,思考这个代码的实现逻辑思路。

import { Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';
import { GlobalHolder } from 'app/global.holder';
import { ProductEnv } from 'app/product/product.model';
import { InterfaceService } from 'app/interface/api/interface.service';

@Component({
    selector: 'ai-execute-env',
    templateUrl: 'execute.env.component.html'
})

export class ExecuteEnvComponent implements OnInit, OnDestroy {
    environments: Array<ProductEnv> = [];
    @Output() test = new EventEmitter();
    constructor(
        private global: GlobalHolder,
        private interfaceService: InterfaceService
        ){
    }

    ngOnInit() {
        this.interfaceService.getInterfaceNetworkData().subscribe(rep => {
           this.environments = rep
        });        
    }

    emitExecute(id: number): void {
          this.test.emit(id)
    }
    ngOnDestroy() {
    }
}

12.holder的作用是?

保持住数据的方案。

13.module作用是?分别的作用是?

@NgModule({
    imports: [
        apiRouting
    ],
    declarations: [
        InterfaceComponent
    ],
    exports: [
        ServiceEditComponent
    ],
    entryComponent:[],
    providers: [
        InterfaceHolder,
    ],
    
})
export class InterfaceApiModule {

}

14.在@Component中的providers这里定义的内容该如何去理解?具体的作用是?

15.module.ts文件作用是?为何有的模块没有这个呢?module.ts文件中定义的@NgModule作用是?

16.@NgModule中定义的imports,declarations,entryComponents,providers,bootstrap分别的作用?这个内容十分的重要。

declarations:用来放组件、指令、管道的声明。
imports:用来导入外部模块。
providers:需要使用的 Service 都放在这里。
bootstrap:定义启动组件。你可能注意到了这个配置项是一个数组,也就是说可以指定做个组件作为启动点,但是这种用法是很罕见的。

17.set和get的作用是?

18.@Input,@Output,,   @AiComponent(),@ViewChild(AceEditorDirective)分别的作用是什么?

19.如何理解下方的代码?在小括号后边的赋值操作具体的作用是啥?

依赖注入,将外部的服务注入到本服务中即可。

  constructor(private initializerService: PageInitializerService, private submitService: PageSubmitService) {
      this.xxx= yyyy
    }

20.分析现实现思路是什么?

let subscription = this.global.product.pipe<Array<Group>>(mergeMap(product => {
            this.product = product;
            if (product) {
                return this.groupService.qryGroup(product.product_id, 'widget');
            } else {
                return of([]);
            }
        })).subscribe(groups => {})

21.什么作用呢?

if (module['hot']) {
    module['hot'].accept();
}

22.switchMap的作用和使用场景?

rxjs, map,  flatMap,mergeMap, switchMap 区别是啥?

rxjs map, flatMap/mergeMap, switchMap区别_好好学习,天天向上!-CSDN博客

switchMap 和其他打平操作符的主要区别是它具有取消效果。在每次发出时,会取消前一个内部 observable (你所提供函数的结果) 的订阅,然后订阅一个新的 observable 。你可以通过短语切换成一个新的 observable来记忆它.

23.@component 中的providers选项的具体作用是什么?

24.以下代码的作用是什么?

import { PAGE_SUBMIT_PROCESSORS } from 'app/ui/page/submit';

@Component({
    selector: 'ai-ui-page-edit',
    templateUrl: 'ui.page.edit.component.html',
    styleUrls: ['ui.page.edit.scss'],
    providers: [
        ...PAGE_SUBMIT_PROCESSORS
    ]
})
export const PAGE_SUBMIT_PROCESSORS: ClassProvider[] = [
    { provide: SUBMIT_PROCESSOR, useClass: PageValidateSubmit, multi: true },
    { provide: SUBMIT_PROCESSOR, useClass: GlobalProductSubmit, multi: true },
    { provide: SUBMIT_PROCESSOR, useClass: PageModSubmit, multi: true },
    { provide: SUBMIT_PROCESSOR, useClass: PageAddSubmit, multi: true }
];

25.保存功能代码全局分析?为何每次需要返回原来的路由地址并触发数据查询初始化?

 submit(item: UIPage): void {
        let id = item.component_id;
        this.processors.reduce<Observable<any>>((previousValue, currentValue) => previousValue.pipe(switchMap(pre => currentValue.postProcess(pre))), of(item)).subscribe(() => {
            if (isPresent(this.drawerRef)) {
                this.drawerRef.close(item);
                return;
            }
            if (isPresent(id)) {
                toastr.success('组件保存成功');
                // this.eventManager.broadcast('update-page', item);
            } else {
                toastr.success('添加组件成功');
                this.eventManager.broadcast('add-page', item);
            }
            this.router.navigate([`pages/ui/page/edit/${item.component_id}`]);
        });
    }

26.代码分析? @Optional()和@Inject(SUBMIT_PROCESSOR)分别的作用是什么?

constructor(private router: Router,
                @Optional() private drawerRef: DrawerRef,
                private eventManager: EventManager,
                @Inject(SUBMIT_PROCESSOR) private processors: SubmitProcessor[]) {
    }

27.以下代码的作用是啥?

 @HostBinding('class.d-none')


说明文档:  https://blog.csdn.net/i042416/article/details/108950049

28.以下内容的具体作用是什么?

import { merge, Observable, of, Subject } from 'rxjs';
import { filter, switchMap, switchMapTo, takeUntil, tap } from 'rxjs/operators';
import { Observable, of, Subscription } from 'rxjs';
import { mergeMap, tap } from 'rxjs/operators';
import { DrawerService, EventManager, isPresent, ModalService } from 'share';

29.pipe管道的具体的作用是什么?在请求发出去之后还使用管道有啥实际作用?

return this.http.get(this.baseUrl, { params }).pipe(map<any, Array<Product>>(page => page.page_data || []));

 就是管道,简单来说,管道的作用就是传输。并且不同的管道具有不同的作用。(其实就是处理数据);

Angular自带的pipe函数有:专门用来处理数据的管道。

DatePipe : 日期管道,格式化日期

JsonPipe :  将输入数据对象经过JSON.stringify()方法转换后输出对象的字符串

UpperCasePipe: 将文本所有小写字母转换成大写字母

LowerCasePipe: 将文本所有大写字母转换成小写字母

DecimalPipe: 将数值按照特定的格式显示文本

CurrentcyPipe: 将数值进行货币格式化处理

SlicePipe: 将数组或者字符串裁剪成新子集

PercentPipe:  将数值转百分比格式

30.在angular项目中,如何实现对表格数据的勾选功能,这个环境的api太多,非常的冗杂,对于入门者来说并不容易接受。

详情见计划和告警规则的生效,失效批量处理。

31.@Component组件中的providers主要的作用是啥?里面的配置内容主要是干啥的?这个知识点需要记录一下。

import { VALIDATABLE, forwardRef } from '@angular/core';
@Component({
    selector: 'ai-plan',
    templateUrl: 'plan.component.html',
    styleUrls: ['plan.component.scss'],
    providers: [{
        provide: VALIDATABLE,
        useExisting: forwardRef(() => PlanComponent)
    }]
})

32.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值