angular7快速上手

项目初始化

安装 Angular CLI (可选)

$ npm install -g @angular/cli

检测 Angular CLI 是否安装成功

$ ng --version

创建新的项目

$ ng new project-name

启动本地服务器

$ cd project-name
$ ng serve
# 或者
$ ng serve --deploy-url / --host 0.0.0.0 --disable-host-check --open --port 3333 --proxy-config proxy.conf.json --ssl --live-reload false
  • 新建模块
    到指定目录下,执行语句
ng generate component 模块名称
  • 新建服务
ng g service 服务名称

angular7缺陷

  1. 不支持hm
    angular8现在默认支持hot page reload,即页面刷新。
    但是不支持模块更新。
    即便按照官网配置了大堆使其支持模块更新,那也是不保持当前state的模块更新。

  2. 不支持本地https开发
    即便通过配置使其支持了本地https启动,每一次代码改动,会多次触发hot page reload。
    开发体验贼差。
    这时不得不关掉hot page reload,手动刷新页面。
    启动命令参考
    ng serve --deploy-url / --host 0.0.0.0 --disable-host-check --open --port 3333 --proxy-config proxy.conf.json --ssl --live-reload false

  3. 没有一个集中管理页面state的库
    非父子组件之间的通信,得靠各自组件的service。

  4. 打包后的文件,无法和开发中的文件进行映射
    无法代理线上的文件到开发中的本地文件

模板中复用html

<ng-template [ngTemplateOutlet]="MsgRef"></ng-template>
<ng-template [ngTemplateOutlet]="MsgRef"></ng-template>
<ng-template #MsgRef>被复用的html块</ng-template>

循环创建html代码块

<ng-container *ngFor="let reasonItem of reasonObj;let ii = index;">
  <div class="recommend-result-box"  (click)="confrimReasonBox(ii)">
    {{reasonItem.name}}
  </div>
</ng-container>

html的class切换

<div [ngClass]="{'trueShowClass':true}"></div>

proxy.conf.js较佳实践

  1. proxy.confg.json改为proxy.config.js
    更好支持js语法,注释。

这时ng项目启动命令为

ng serve --deploy-url / --host 0.0.0.0 --disable-host-check --open --port 3330 --proxy-config proxy.conf.js --ssl --live-reload false

注意proxy.conf.js

  1. 具体接口匹配需放在通用接口匹配之前
    防止无法匹配到所需接口。
  2. pathRewrite属性使用函数形式
  3. proxy.conf.js其实是webpack的proxy配置,配置方式一致。

本地项目代码启动,配置线上的cookie方式

module.exports = {
     "/api/jiuding": {
     "target": "https://gztest.yuntrial.com",
     "secure": false,
     "changeOrigin": true,
     "headers":{
        "Cookie":"xxxxx"
     }
   }
}

DOM获取的例子

import { Component, ElementRef, ViewChild, AfterViewInit, Renderer } from '@angular/core';

@Component({
  selector: 'my-app',
  template: `
    <h1>Welcome to Angular World</h1>
    <div #greet>Hello {{ name }}</div>
  `,
})
export class AppComponent {
  name: string = 'Semlinker';

  @ViewChild('greet') greetDiv: ElementRef;

  constructor(private elementRef: ElementRef, private renderer: Renderer) { }

  ngAfterViewInit() {
    // 这个就是<div #greet>的dom对象
    this.greetDiv.nativeElement
  }
}

for循环的dom引用获取

@ViewChildren('evidenceListArr') evidenceListArr: any;

// 获取对应的dom引用,idx是数组中对应的序号
this.evidenceListArr._results[idx]

组件通信

使用service和rxjs,满足各种场景。

import { BehaviorSubject } from 'rxjs';
...
public messageSource = new BehaviorSubject<string>('Start');
changemessage(message: string): void {
  this.messageSource.next(message);
}
changeInfo() {
  this.communication.changemessage('Message from child 1.');
}
ngOnInit() {
  this.communication.messageSource.subscribe(Message => {
    window.alert(Message);
    this.info = Message;
  });
}

路由子模块创建

./src/app目录下新建一个名叫pages模块命令是ng generate module pages --routing
./src/app/pages目录下新建组件ng generate component knowledge-index
修改./src/app/pages/pages-routing.module.ts文件

import {KnowledgeIndexComponent} from './knowledge-index/knowledge-index.component';

const routes: Routes = [{
  path: '',
  children:[
    {
      path: 'knowledge-index',
      component: KnowledgeIndexComponent
    },
  ]
}];

修改./src/app-routing.module.ts文件

const routes: Routes = [
  {path: 'case',loadChildren: './pages/pages.module#PagesModule'},
  {path: '', redirectTo: '/case', pathMatch: 'full'},
];

访问链接[http://localhost:4200/case/knowledge-index](http://localhost:4200/case/knowledge-index)即可。

ng-form的响应式表单的数组类项绑定

angular官网例子对数组类绑定不够完整,很多人都会搞不清楚写法。
下面的例子比较完整。

<form nz-form [formGroup]="advancedOption" class="ant-advanced-search-form">
    <div formArrayName="textSearchs"  *ngFor="let textSearch of textSearchs.controls; let i=index">
      <div [formGroup]="textSearch">
        <nz-form-item nzFlex>
          <nz-form-label>文本检索</nz-form-label>
          <nz-form-control>
            <nz-select [formControlName]="'type'" style="width: 100px;" nzPlaceHolder="">
              <nz-option nzValue="全文内容" nzLabel="全文内容"></nz-option>
              <nz-option nzValue="本院认为" nzLabel="本院认为"></nz-option>
              <nz-option nzValue="本院查明" nzLabel="本院查明"></nz-option>
              <nz-option nzValue="裁判结果" nzLabel="裁判结果"></nz-option>
              <nz-option nzValue="原告诉称" nzLabel="原告诉称"></nz-option>
              <nz-option nzValue="被告辩称" nzLabel="被告辩称"></nz-option>
              <nz-option nzValue="审理经过" nzLabel="审理经过"></nz-option>
            </nz-select>
          </nz-form-control>
          <nz-form-control>
            <input
              nz-input
              placeholder=""
              [formControlName]="'text'"
            />
          </nz-form-control>
        </nz-form-item>
      </div>
    </div>
</form>
import { FormBuilder, FormArray, Validators } from '@angular/forms';

export class XxxComponent {
  advancedOption = this.fb.group({
    textSearchs: this.fb.array([
      this.fb.group(
        {
          type: ['全文内容'],
          text: [''],
        }
      ),
    ])
  });
  
  get textSearchs(){
    return this.advancedOption.get('textSearchs') as FormArray;
  }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,273评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,349评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,709评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,520评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,515评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,158评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,755评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,660评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,203评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,287评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,427评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,122评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,801评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,272评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,393评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,808评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,440评论 2 359