{"id":2604,"date":"2020-04-11T15:12:42","date_gmt":"2020-04-11T07:12:42","guid":{"rendered":"http:\/\/www.yuguoxy.com\/geekhome\/?p=2604"},"modified":"2026-08-18T12:35:27","modified_gmt":"2026-08-18T04:35:27","slug":"2604","status":"publish","type":"post","link":"https:\/\/ai.zhousir.top\/?p=2604","title":{"rendered":"Angular8\u65b0\u7279\u6027"},"content":{"rendered":"<section id=\"wenyan\" style=\"font-family: system-ui, 'Apple Color Emoji', 'Segoe UI', 'Segoe UI Symbol', 'Noto Sans', Roboto, sans-serif; line-height: 1.75; font-size: 16px; color: #000000; caret-color: #000000;\" data-provider=\"WenYan\">\n<p style=\"margin: 1em 0px;\">Angular \u56e2\u961f\u53d1\u5e03\u4e86 <strong style=\"color: #4870ac;\">8.0.0<\/strong> \u7a33\u5b9a\u7248\u3002NgConf 2019 \u4e0a\u5df2\u7ecf\u63d0\u5230\u4ece\u5de5\u5177\u5230\u5dee\u5206\u52a0\u8f7d\u7684\u8bb8\u591a\u5185\u5bb9\u3002\u4e0b\u9762\u6309\u65b0\u529f\u80fd\u505a\u4e00\u4efd\u901f\u89c8\uff0c\u65b9\u4fbf\u5bf9\u7167\u5347\u7ea7\u3002<\/p>\n<p style=\"margin: 1em 0px;\">\u8fd9\u4e00\u7248\u91cc\u66f4\u503c\u5f97\u5148\u8bb0\u4f4f\u7684\u662f\uff1a<strong style=\"color: #4870ac;\">\u5dee\u5206\u52a0\u8f7d<\/strong>\uff08\u51cf\u5c0f\u5305\u4f53\u79ef\uff09\u3001<code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">loadChildren<\/code> \u6539\u6210\u52a8\u6001 import\u3001<code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">ViewChild<\/code> \/ <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">ContentChild<\/code> \u5fc5\u987b\u5e26 <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">static<\/code> \u6807\u5fd7\uff0c\u4ee5\u53ca Ivy\u3001Bazel \u4ecd\u5904\u4e8e\u53ef\u9009\u9884\u89c8\u3002<\/p>\n<table style=\"display: table; text-align: left; overflow: auto; border-collapse: collapse; margin: 1.4em auto; max-width: 100%; table-layout: fixed; overflow-wrap: break-word; word-break: break-all;\" width=\"800\">\n<thead>\n<tr>\n<th style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top; text-align: center; font-weight: bold; color: #4870ac; background: #f7f7f7;\">\u7279\u6027<\/th>\n<th style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top; text-align: center; font-weight: bold; color: #4870ac; background: #f7f7f7;\">\u72b6\u6001 \/ \u4f5c\u7528<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">\u5dee\u5206\u52a0\u8f7d<\/td>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">\u6309 browserslist \u62c6\u5305\uff0c\u65e7\u6d4f\u89c8\u5668\u8d70\u5e26 <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">nomodule<\/code> \u7684 polyfill<\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">Ivy<\/td>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">\u53ef\u9009\u9884\u89c8\uff1b\u65b0\u5e94\u7528\u5f53\u65f6\u4ecd\u5efa\u8bae\u89c6\u56fe\u5f15\u64ce<\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">Bazel<\/td>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">\u53ef\u9009\u9884\u89c8\uff0c\u9884\u8ba1\u8fdb CLI v9<\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">\u61d2\u52a0\u8f7d<\/td>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">\u5e9f\u5f03\u5b57\u7b26\u4e32 <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">loadChildren<\/code>\uff0c\u6539\u52a8\u6001 import<\/td>\n<\/tr>\n<tr>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">ViewChild<\/td>\n<td style=\"border: 1px solid #d9dfe4; padding: 9px 12px; font-size: 0.75em; line-height: 22px; vertical-align: top;\">\u5fc5\u987b\u63d0\u4f9b <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">static: true\/false<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u4e00\u3001\u5dee\u5206\u52a0\u8f7d\u4e0e SVG \u6a21\u677f<\/h2>\n<p style=\"margin: 1em 0px;\">\u6839\u636e browserslist\uff0c\u6784\u5efa\u65f6 Angular \u4f1a\u4e3a\u4e0d\u540c\u6d4f\u89c8\u5668\u521b\u5efa\u5355\u72ec\u7684 polyfill \u5305\uff0c\u4ece\u800c\u51cf\u5c0f\u6346\u7ed1\u5305\u3002\u505a\u6cd5\u662f\u7ed9\u65e7\u73af\u5883\u811a\u672c\u52a0\u4e0a nomodule\uff0c\u963b\u6b62\u5b83\u5728\u652f\u6301 module \u7684\u73b0\u4ee3\u6d4f\u89c8\u5668\u91cc\u6267\u884c\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">&lt;body&gt; \n  &lt;pp-root&gt; &lt;\/ pp-root&gt;\n\n&lt;script type =\u201ctext \/ javascript\u201dsrc =\u201cruntime.js\u201d&gt; &lt;\/ script&gt; \n  &lt;script type =\u201ctext \/ javascript\u201dsrc =\u201ces2015- polyfills.js \u201d nomodule &gt; &lt;\/ script&gt; \n  &lt;script type =\u201c text \/ javascript\u201csrc =\u201dpolyfills.js\u201c&gt; &lt;\/ script&gt; \n  &lt;script type =\u201dtext \/ javascript\u201csrc =\u201dstyles.js\u201c&gt; &lt;\/ script&gt; \n  &lt;script type =\u201dtext \/ javascript\u201csrc =\u201dvendor .js\u201c&gt; &lt;\/ script&gt; \n  &lt;script type =\u201dtext \/ javascript\u201csrc =\u201dmain.js\u201c&gt; &lt;\/ script&gt; \n\n&lt;\/ body&gt;<\/code><\/pre>\n<p style=\"margin: 1em 0px;\"><code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">nomodule<\/code> \u662f\u5e03\u5c14\u5c5e\u6027\uff1a\u73b0\u4ee3\u7528\u6237\u4ee3\u7406\u8dd1\u6a21\u5757\u811a\u672c\uff0c\u65e7\u7528\u6237\u4ee3\u7406\u8dd1\u7ecf\u5178\u811a\u672c\u3002<\/p>\n<h3 style=\"padding: 0px; color: #4870ac; margin: 1.2em 0px 1em; font-size: 1.3em;\">SVG \u4f5c\u4e3a\u6a21\u677f<\/h3>\n<p style=\"margin: 1em 0px;\">\u73b0\u5728\u53ef\u4ee5\u628a SVG \u6587\u4ef6\u5f53\u4f5c\u6a21\u677f\uff0c\u4e0d\u518d\u53ea\u80fd\u7528\u5185\u8054 HTML \u6216\u5916\u90e8 HTML\u3002<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">@Component({\n  selector: \"app-icon\",\n  templateUrl: \".\/icon.component.svg\",\n  styleUrls: [\".\/icon.component.css\"]\n})\nexport class AppComponent {...}<\/code><\/pre>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u4e8c\u3001Ivy \u6e32\u67d3\u5f15\u64ce\uff08\u5b9e\u9a8c\uff09<\/h2>\n<p style=\"margin: 1em 0px;\">Ivy \u5728 Angular 6 \u5c31\u63d0\u51fa\uff0c8 \u4ecd\u662f\u8bd5\u9a8c\u3002\u53ef\u901a\u8fc7 enable-ivy \u6807\u5fd7\u8bd5\u7528\u3002Igor Minar \u5728 ngConf 2019 \u5efa\u8bae\uff1a\u65b0\u5e94\u7528\u4ecd\u63a8\u8350\u89c6\u56fe\u5f15\u64ce\u3002<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">To enable Ivy in an existing project set enableIvyoption in the angularCompilerOptions in your project\u2019s tsconfig.app.json<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u73b0\u6709\u9879\u76ee\u5728 tsconfig.app.json \u7684 angularCompilerOptions \u91cc\u8bbe enableIvy\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">\u201cangularCompilerOptions\u201d\uff1a {\u201cenableIvy\u201d\uff1atrue}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u4e5f\u53ef\u4ee5\u7528\u65b0\u5f15\u64ce\u521b\u5efa\u5e94\u7528\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">ng new my-app --enable-ivy<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">Ivy \u7684\u597d\u5904\uff08\u524d\u4e09\u9879\u9884\u8ba1\u5728 Angular 9\uff09\uff1a\u7f16\u8bd1\u66f4\u5feb\u3001\u6a21\u677f\u7c7b\u578b\u68c0\u67e5\u66f4\u597d\u3001\u5305\u66f4\u5c0f\uff08I\/O 19 \u4e0a Vikram Subramanian \u5c55\u793a\u8fc7 4.3 KB \u7684\u5e94\u7528\uff09\u3001\u5411\u540e\u517c\u5bb9\u3001\u4ee5\u53ca\u53ef\u4ee5\u8c03\u8bd5\u6a21\u677f\u3002<\/p>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u4e09\u3001Bazel \u4e0e Builders API<\/h2>\n<p style=\"margin: 1em 0px;\">Bazel \u662f Google \u5f00\u6e90\u6784\u5efa\u5de5\u5177\uff0c\u5185\u90e8\u7528\u4e86\u5f88\u4e45\uff0c\u5f53\u65f6\u5bf9\u6240\u6709\u4eba\u4ecd\u662f\u300c\u9009\u62e9\u9884\u89c8\u300d\uff0c\u9884\u8ba1\u5305\u542b\u8fdb @angular\/cli \u7b2c 9 \u7248\u3002\u597d\u5904\uff1a\u9996\u6b21\u6784\u5efa\u8f83\u6162\u4f46\u5e76\u53d1\u66f4\u5feb\uff08Angular CI \u4ece 60 \u5206\u949f\u964d\u5230 7.5 \u5206\u949f\uff09\uff1b\u589e\u91cf\u6784\u5efa\u53ea\u7f16\u6539\u8fc7\u7684\u90e8\u5206\uff1bBazel \u6587\u4ef6\u9ed8\u8ba4\u9690\u85cf\uff0c\u53ef\u5f39\u51fa\u67e5\u770b\u3002<\/p>\n<p style=\"margin: 1em 0px;\">\u6dfb\u52a0\u652f\u6301\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">ng add @ angular \/ bazel<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u6216\u7528 Bazel \u5efa\u65b0\u5e94\u7528\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">npm install -g @ angular \/ bazel \nng new my-app --colection = @ angular \/ bazel<\/code><\/pre>\n<h3 style=\"padding: 0px; color: #4870ac; margin: 1.2em 0px 1em; font-size: 1.3em;\">Builders API\uff08Architect API\uff09<\/h3>\n<p style=\"margin: 1em 0px;\">Angular \u7528 builder \u505a serve\u3001build\u3001test\u3001lint\u3001e2e\uff0c\u53ef\u5728 angular.json \u91cc\u770b\u5230\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">...\n\"projects\": {\n  \"app-name\": {\n    ...\n    \"architect\": {\n      \"build\": {\n        \"builder\": \"@angular-devkit\/build-angular:browser\",\n        ...\n      },\n      \"serve\": {\n        \"builder\": \"@angular-devkit\/build-angular:dev-server\",\n        ...\n      },\n      \"test\": {\n        \"builder\": \"@angular-devkit\/build-angular:karma\",\n        ...\n      },\n      \"lint\": {\n        \"builder\": \"@angular-devkit\/build-angular:tslint\",\n        ...\n      },\n      \"e2e\": {\n        \"builder\": \"@angular-devkit\/build-angular:protractor\",\n        ...\n      }\n    }\n  }\n}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u4ece 8 \u5f00\u59cb\u53ef\u4ee5\u5199\u81ea\u5b9a\u4e49 builder\uff0c\u7c7b\u4f3c\u4e8e gulp\/grunt \u65f6\u4ee3\u7684\u547d\u4ee4\u3002builder \u5c31\u662f\u4e00\u7ec4\u547d\u4ee4\u7684\u51fd\u6570\uff0c\u4ea4\u7ed9 @angular-devkit\/architect \u7684 createBuilder()\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">import { createBuilder } from '@angular-devkit\/architect';\nfunction customBuild(options, context) { \n  return new Promise((resolve, reject) =&gt; {\n    \/\/ set of commands\n  })\n}\ncreateBuilder(customBuild);<\/code><\/pre>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u56db\u3001\u61d2\u52a0\u8f7d\u3001$location\u3001Worker<\/h2>\n<p style=\"margin: 1em 0px;\">\u4e0d\u518d\u63a8\u8350 loadChildren:string\u30028.0.0 \u4e4b\u524d\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">loadChildren: '.\/lazy\/lazy.module#LazyModule';<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u73b0\u5728\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">loadChildren: () =&gt; import('.\/lazy\/lazy.module').then(m =&gt; m.LazyModule)<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u61d2\u52a0\u8f7d\u6a21\u5757\u5f88\u591a\u3001\u60f3\u9760\u5305\u6765\u6539\u65f6\uff0c\u53ef\u67e5\u5f53\u65f6\u7684\u8fc1\u79fb\u8bf4\u660e\u3002<\/p>\n<h3 style=\"padding: 0px; color: #4870ac; margin: 1.2em 0px 1em; font-size: 1.3em;\">AngularJS $location<\/h3>\n<p style=\"margin: 1em 0px;\">\u4e3a\u65b9\u4fbf\u4ece AngularJS \u5347\u7ea7\uff0c\u589e\u52a0\u4e86\u5bf9 $location \u7684\u652f\u6301\uff0c\u65b0\u5305\u662f angular\/common\/upgrade\uff1a\u53ef\u4ece\u4f4d\u7f6e\u670d\u52a1\u53d6\u72b6\u6001\u3001\u8ddf\u8e2a\u6240\u6709\u4f4d\u7f6e\u53d8\u5316\u3001\u8bfb\u53d6 hostname \/ protocol \/ port \/ search\uff0c\u5e76\u63d0\u4f9b MockPlatformLocation \u6d4b\u4f4d\u7f6e\u670d\u52a1\u3002<\/p>\n<h3 style=\"padding: 0px; color: #4870ac; margin: 1.2em 0px 1em; font-size: 1.3em;\">Web Worker \u4e0e Service Worker<\/h3>\n<p style=\"margin: 1em 0px;\">\u53ef\u4ee5\u628a\u8017\u65f6\u8fdb\u7a0b\u59d4\u6d3e\u7ed9 Web Worker\u3002\u7528 CLI \u751f\u6210\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">ng g webWorker &lt;name&gt;<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">PWA \u80cc\u666f\u4e0b Service Worker \u4e5f\u6709\u6539\u8fdb\uff1aSwRegistrationOptions \u589e\u52a0\u9009\u9879\uff1b\u4e00\u4e2a\u57df\u652f\u6301\u591a\u4e2a\u5e94\u7528\u3002\u7ec6\u8282\u89c1 Angular \u6587\u6863\u3002<\/p>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u4e94\u3001\u8868\u5355\u3001TypeScript \u4e0e\u6027\u80fd<\/h2>\n<p style=\"margin: 1em 0px;\">\u65b0\u589e <code style=\"font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; color: #4870ac; font-size: 0.9em; font-weight: normal; overflow-wrap: break-word; padding: 2px 4px; border-radius: 3px; margin: 2px; background-color: #f6f8fa; word-break: break-all;\">markAllAsTouched<\/code>\uff0c\u4e00\u6b21\u6027\u628a FormGroup \u91cc\u6240\u6709\u63a7\u4ef6\u6807\u6210 touched\uff0c\u65b9\u4fbf\u89e6\u53d1\u6574\u7ec4\u6821\u9a8c\u3002\u4ee5\u524d\u8981\u624b\u5199\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">validateFormAndDisplayErrors(form: FormGroup) {\n  Object.keys(form.controls).map((controlName) =&gt; {\n    form.get(controlName).markAsTouched({onlySelf: true});\n  });\n}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u4ece FormArray \u6e05\u6389\u6240\u6709\u5143\u7d20\uff0c\u4ee5\u524d\u8981\u5faa\u73af removeAt(0) \u76f4\u5230\u7a7a\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">while\uff08formArray.length\uff09{ \n  formArray.removeAt\uff080\uff09; \n}<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u73b0\u5728\u76f4\u63a5 clear\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">formArray.clear()<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">TypeScript \u652f\u6301\u5230 3.4.x \u4e00\u7ebf\uff08\u6587\u4e2d\u5199 Angular 8 \u7528 TS 3.3\uff0cv7 \u7528 3.2.x\uff09\uff0c\u6ca1\u6709\u592a\u591a\u7834\u574f\u6027\u53d8\u5316\u3002<\/p>\n<p style=\"margin: 1em 0px;\">\u6027\u80fd\uff1aServerRendererFactory2 \u4ee5\u524d\u4e3a\u6bcf\u4e2a\u8bf7\u6c42\u65b0\u5efa DomElementSchemaRegistry\uff0c\u5f88\u8d35\uff1b\u73b0\u5728\u5171\u4eab\u5168\u5c40\u5b9e\u4f8b\u3002<\/p>\n<h2 style=\"padding: 1px 12.5px; color: #ffffff; margin: 1.2em 0px 1em; border-radius: 4px; display: inline-block; background-color: #4870ac; font-size: 1.3em;\">\u516d\u3001\u5f03\u7528 API \u4e0e ViewChild \u65f6\u673a<\/h2>\n<ul style=\"padding-left: 1rem; margin-left: 1rem; font-size: 0.9rem; list-style-type: disc;\">\n<li>\n<section>\u4ece @angular\/platform-browser \u5220\u9664\u5df2\u5f03\u7528\u7684 DOCUMENT\uff0c\u6539\u4ece @angular\/common \u5bfc\u5165<\/section>\n<\/li>\n<li>\n<section>@angular\/http \u5728 Angular 5 \u5c31\u4e0d\u63a8\u8350\uff0c\u56e0 platform-server \u4f9d\u8d56\u800c\u4e00\u76f4\u7559\u7740\uff0c8 \u8d77\u4ece\u5305\u5217\u8868\u5220\u9664<\/section>\n<\/li>\n<\/ul>\n<p style=\"margin: 1em 0px;\">\u4f7f\u7528 ViewChild \/ ContentChild \u65f6\u5fc5\u987b\u63d0\u4f9b static\uff0c\u58f0\u660e\u4f55\u65f6\u89e3\u6790\u5b9e\u4f8b\uff1a<\/p>\n<pre style=\"overflow: auto hidden; word-break: normal; white-space: pre; tab-size: 2; border-radius: 5px; line-height: 2; margin: 1em 0.5em; padding: 0.5em; box-shadow: rgba(0, 0, 0, 0.55) 0px 1px 5px; font-size: 12px; background: #002b36; max-width: 100%; overflow-wrap: normal;\"><code class=\"hljs\" style=\"word-break: normal; white-space: nowrap; tab-size: 2; font-size: 12px; font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Roboto Mono', 'Courier New', 'Microsoft YaHei', monospace; display: block; overflow-x: auto; margin: 0.5em; padding: 3px 5px; color: #93a1a1; background: #002b36; overflow-wrap: normal;\">\/\/ Ensure Change Detection runs before accessing the instance\n@ContentChild('foo', { static: false }) foo!: ElementRef;\n\/\/ If you need to access it in ngOnInt hook\n@ViewChild(TemplateRef, { static: true }) foo!: TemplateRef;<\/code><\/pre>\n<p style=\"margin: 1em 0px;\">\u8fd9\u4e0d\u9002\u7528\u4e8e ViewChildren \/ ContentChildren\uff0c\u5b83\u4eec\u5728\u53d8\u66f4\u68c0\u6d4b\u540e\u89e3\u6790\u3002static: true \u65f6\u62ff\u4e0d\u5230 *ngIf \u8fd9\u7c7b\u52a8\u6001\u6a21\u677f\u7684\u7ed3\u679c\u3002Ivy \u4f1a\u7528\u8fd9\u5957\u8bed\u6cd5\uff0c\u53ef\u8fd0\u884c ng update @angular\/core \u8fc1\u79fb\u3002<\/p>\n<p style=\"margin: 1em 0px;\">Angular Material \u5de5\u7a0b\u6539\u540d\u4e3a Angular Components\uff0c\u5305\u540d\u4e0d\u53d8\u3002\u603b\u4f53\u6539\u52a8\u4e0d\u5927\uff0c\u4ecd\u662f\u6bcf\u5e74\u4e00\u4e2a\u7a33\u5b9a\u7248\u3002<\/p>\n<blockquote style=\"display: block; font-size: 0.9em; border-left: 3px solid #4870ac; padding: 0.5em 1em; margin: 0px; background: #f6f8fa; color: #40464f;\">\n<p style=\"margin: 1em 0px;\"><strong style=\"color: #4870ac;\">\u4e00\u53e5\u8bdd\u603b\u7ed3\uff1aAngular 8 \u7684\u5173\u952e\u5347\u7ea7\u70b9\u662f\u5dee\u5206\u52a0\u8f7d\u3001\u52a8\u6001 import \u61d2\u52a0\u8f7d\uff0c\u4ee5\u53ca ViewChild \u5fc5\u987b\u58f0\u660e static\uff1bIvy \u548c Bazel \u5f53\u65f6\u4ecd\u662f\u9884\u89c8\u3002<\/strong><\/p>\n<\/blockquote>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>Angular \u56e2\u961f\u53d1\u5e03\u4e86 8.0.0 \u7a33\u5b9a\u7248\u3002NgConf 2019 \u4e0a\u5df2\u7ecf\u63d0\u5230\u4ece\u5de5\u5177\u5230\u5dee\u5206\u52a0\u8f7d\u7684\u8bb8\u591a\u5185\u5bb9\u3002 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[105],"tags":[150],"_links":{"self":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/2604"}],"collection":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2604"}],"version-history":[{"count":2,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/2604\/revisions"}],"predecessor-version":[{"id":2748,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=\/wp\/v2\/posts\/2604\/revisions\/2748"}],"wp:attachment":[{"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2604"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2604"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ai.zhousir.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2604"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}