NG4/5/6/7 学习笔记

还没开始写 就变成了 NG5了。 =。= 僵硬

写了一段都变 Angular7 了,实在是学不动了。


基础语法的就不细表了,参考1写的更为优秀,写一下耽误了我时间的部分~

  • http - interceptor
    由于之前用过axios的拦截器,所以在使用的时候理所应当的想到了NG的拦截器。

    拦截器允许我们将中间件逻辑插入管线中。

    主要是分为 请求拦截器 (Request Interceptor) 和 响应拦截器 (Response Interceptor)

  • 引入第三方库
    planA. npm 安装, 并且安装相应的声明文件 @types/**
    planB. 下载第三方到assets 下,在angular-cli 引入,并且在typings.ts 里进行声明。

      declare var $: any; 
      declare var jQuery: any;
    
  • 父子路由

  • 代理
    在proxy.conf.json 下配置请求代理。防止跨域

  • pipe and resolver ..

  • ts相关

  • event bind


6.14

  • 同一个Pipe 在两个module里引用,错误提示:在更高层级引用,so 在pipe中使用pipe.module 导出以下 所有pipe供组件使用。

  • UI复用 可以通过指令 directive

  • 纯逻辑复用 可以通过class extends 继承

  • Angular 2 HostListener & HostBinding


6.15 Typescript

  • Class
    派生类通常被称作子类,基类通常被称作超类。
    派生类包含了一个构造函数,它必须调用super(),它会执行基类的构造函数。 而且,在构造函数里访问this的属性之前,我们一定要调用super()。 这个是TypeScript强制执行的一条重要规则。

可能对于一部分前端来讲,类这个概念并不是很好理解,理解原型/原型链 与 ts里类的编译前后关系 是这部分学习的主要内容。


8.23 Ng-Alain Tips

  • less 降级
    使用官方提供的package.json来安装依赖,否则会报一个less 的报错。官方建议降级 less -> ~2.7.0 , 安装 less-loader。删除原有的package.json 和 node_modules来重新安装。
ERROR in ./src/styles.less (./node_modules/raw-loader!./node_modules/postcss-loader/lib??embedded!./node_modules/less-loader/dist/cjs.js??ref--15-3!./src/styles.less)
Module build failed:

// region: PLACEHOLDER, IMPORTANT: don't remove
@import '~@delon/theme/styles/index';
^
'~@delon/theme/styles/index.less' wasn't found. Tried - /Users/jipeng/htdoc/frontend/alain/demo/src/~@delon/theme/styles/index.less,~@delon/theme/styles/index.less
      in /Users/jipeng/htdoc/frontend/alain/demo/src/styles.less (line 2, column 0)
ERROR in ./src/app/layout/passport/passport.component.less
Module build failed:

@import '~@delon/theme/styles/default';
^
'~@delon/theme/styles/default.less' wasn't found. Tried - /Users/jipeng/htdoc/frontend/alain/demo/src/app/layout/passport/~@delon/theme/styles/default.less,~@delon/theme/styles/default.less
      in /Users/jipeng/htdoc/frontend/alain/demo/src/app/layout/passport/passport.component.less (line 1, column 0)
ERROR in ./src/app/routes/passport/login/login.component.less
Module build failed:

@import '~@delon/theme/styles/default';
^
'~@delon/theme/styles/default.less' wasn't found. Tried - /Users/jipeng/htdoc/frontend/alain/demo/src/app/routes/passport/login/~@delon/theme/styles/default.less,~@delon/theme/styles/default.less
      in /Users/jipeng/htdoc/frontend/alain/demo/src/app/routes/passport/login/login.component.less (line 1, column 0)
ERROR in ./src/app/routes/passport/register/register.component.less
Module build failed:

@import '~@delon/theme/styles/default';
^
'~@delon/theme/styles/default.less' wasn't found. Tried - /Users/jipeng/htdoc/frontend/alain/demo/src/app/routes/passport/register/~@delon/theme/styles/default.less,~@delon/theme/styles/default.less
      in /Users/jipeng/htdoc/frontend/alain/demo/src/app/routes/passport/register/register.component.less (line 1, column 0)

error link#448
ng-alain 官方package.json

  • Analyzing bundle size with the Angular CLI and Webpack
    遵循官方文档生成分析页面,然后遵循下面参考资料来写查看指令。

查看分析操作

Analyzing bundle size with the Angular CLI and Webpack



TODO:

  • 理解DI

9.13 angular-cli 接入CDN

在angular-cli中deployUrl,对应webpack的配置项是 output.publicPath可以为指定的站点添加cdn

抄了一份angualr-cli.json 常用配置

{
  "project": {
    "name": "angular-questionare",
    "ejected": false // 标记该应用是否已经执行过eject命令把webpack配置释放出来
  },
  "apps": [
    {
      "root": "src", // 源码根目录
      "outDir": "dist", // 编译后的输出目录,默认是dist/
      "assets": [ // 记录资源文件夹,构建时复制到`outDir`指定的目录
        "assets",
        "favicon.ico"
      ],
      "index": "index.html", // 指定首页文件,默认值是"index.html"
      "main": "main.ts", // 指定应用的入门文件
      "polyfills": "polyfills.ts", // 指定polyfill文件
      "test": "test.ts", // 指定测试入门文件
      "tsconfig": "tsconfig.app.json", // 指定tsconfig文件
      "testTsconfig": "tsconfig.spec.json", // 指定TypeScript单测脚本的tsconfig文件
      "prefix": "app", // 使用`ng generate`命令时,自动为selector元数据的值添加的前缀名
      "deployUrl": "//cdn.com.cn", // 指定站点的部署地址,该值最终会赋给webpack的output.publicPath,常用于CDN部署
      "styles": [ // 引入全局样式,构建时会打包进来,常用语第三方库引入的样式
        "styles.css"
      ],
      "scripts": [ // 引入全局脚本,构建时会打包进来,常用语第三方库引入的脚本
      ],
      "environmentSource": "environments/environment.ts", // 基础环境配置
      "environments": { // 子环境配置文件
        "dev": "environments/environment.ts",
        "prod": "environments/environment.prod.ts"
      }
    }
  ],
  "e2e": {
    "protractor": {
      "config": "./protractor.conf.js"
    }
  },
  "lint": [
    {
      "project": "src/tsconfig.app.json"
    },
    {
      "project": "src/tsconfig.spec.json"
    },
    {
      "project": "e2e/tsconfig.e2e.json"
    }
  ],
  "test": {
    "karma": {
      "config": "./karma.conf.js"
    }
  },
  "defaults": { // 执行`ng generate`命令时的一些默认值
    "styleExt": "css", // 默认生成的样式文件后缀名
    "component": {
      "flat": false, // 生成组件时是否新建文件夹包装组件文件,默认为false(即新建文件夹)
      "spec": true, // 是否生成spec文件,默认为true
      "inlineStyle": false, // 新建时是否使用内联样式,默认为false
      "inlineTemplate": false, // 新建时是否使用内联模板,默认为false
      "viewEncapsulation": "Emulated", // 指定生成的组件的元数据viewEncapsulation的默认值
      "changeDetection": "OnPush", // 指定生成的组件的元数据changeDetection的默认值
    }
  }
}

借鉴的github地址

  • 静态文件生成带hash值,用来解决上传cdn后的缓存问题
// 解决方式 编译命令添加 --output-hashing=bundles
 "scripts": {
    "ng": "ng",
    "start": "ng serve --proxy-config proxy.conf.json --env=local",
    "build": "ng build --env=prod --output-hashing=bundles",
    "pre": "ng build --output-hashing=bundles",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },

12-28

DI 解释器的一些文章
@self @host @optional
官方 core api

3-19

NG-CLI 有的时候 angular.json 配置项无法满足所有需求(例如:分包输出css、js之类的),可以通过额外配置webpack配置来手动实现。

"ngx-build-plus": "^7.7.6",  // 多添加这个

// 启动时 显式指明额外配置
"start": "ng serve --extraWebpackConfig webpack.extra.dev.js -o --proxy-config proxy.conf.json",
"build": "ng build --extraWebpackConfig webpack.extra.prod.js --prod --build-optimizer",

Ps: 如果想查看 原始angular 的webpack配置,请移步 ./node_modules/@angular-devkit/build-*


主要参考:
Angular 4.x 修仙之路
NG手册
ts相关
Angular4.x 引入第三方 JS

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

推荐阅读更多精彩内容