| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  | include ../_util-fns | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | :marked | 
					
						
							|  |  |  |  |   ## Write *Component-Relative* URLs to component templates and style files | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-09 14:18:27 +01:00
										 |  |  |  |   ## 为组件模板和样式表文件提供*相对于组件的*URL | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-22 12:27:40 -04:00
										 |  |  |  |   Our components often refer to external template and style files. | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |   We identify those files with a URL in the `templateUrl` and `styleUrls` properties of the `@Component` metadata | 
					
						
							|  |  |  |  |   as seen here: | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-20 10:59:00 +01:00
										 |  |  |  |   组件通常都是引用外部的模板和样式表文件。 | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  |   我们在`@Component`的元数据中通过`templateUrl`和`styleUrls`属性来标识出它们的位置: | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  | +makeExample('cb-component-relative-paths/ts/app/some.component.ts','absolute-config')(format='.') | 
					
						
							|  |  |  |  | :marked | 
					
						
							|  |  |  |  |   By default, we *must* specify the full path back to the application root. | 
					
						
							|  |  |  |  |   We call this an ***absolute path*** because it is *absolute* with respect to the application root. | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-09 14:18:27 +01:00
										 |  |  |  |   默认情况下,我们*必须*指定一个一直到应用程序根目录的完整路径。 | 
					
						
							|  |  |  |  |   我们称之为***绝对路径***,因为它*绝对的*以应用程序的根目录为基准。 | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-22 12:27:40 -04:00
										 |  |  |  |   There are two problems with an *absolute path*: | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |   使用*绝对路径*有两个问题: | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |   1. We have to remember the full path back to the application root. | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |   1. 我们不得不记住到应用程序根目录的完整路径。 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |   1. We have to update the URL when we move the component around in the application files structure. | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |   1. 当我们在应用的文件结构中移动这个组件时,将不得不更新这个URL | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |   It would be much easier to write and maintain our application components if we could specify template and style locations | 
					
						
							|  |  |  |  |   *relative* to their component class file. | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-20 10:59:00 +01:00
										 |  |  |  |   如果能用*相对*于组件类文件的路径来指定模板和样式表的位置,那么编写和维护组件就会变得容易得多。 | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |   *We can!* | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |   *没问题!* | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  | .alert.is-important | 
					
						
							|  |  |  |  |   :marked | 
					
						
							|  |  |  |  |     We can if we build our application as `commonjs` modules and load those modules | 
					
						
							|  |  |  |  |     with a suitable package loader such as `systemjs` or `webpack`. | 
					
						
							|  |  |  |  |     Learn why [below](#why-default). | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-20 10:59:00 +01:00
										 |  |  |  |     如果把应用构建成`commonjs`模块,并用一个合适的包加载器(比如`systemjs`或`webpack`)加载那些模块,就可以用相对路径。 | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  |     [在下方](#why-default)可以学到原理。 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-20 05:24:40 +02:00
										 |  |  |  |     The Angular CLI uses these technologies and defaults to the | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |     *component-relative path* approach described here. | 
					
						
							|  |  |  |  |     CLI users can skip this chapter or read on to understand | 
					
						
							|  |  |  |  |     how it works. | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-23 22:13:02 +01:00
										 |  |  |  |     Angular CLI(命令行界面)使用这些技术,并默认采用这里所说的*组件相对路径*方法。 | 
					
						
							| 
									
										
										
										
											2016-06-09 14:18:27 +01:00
										 |  |  |  |     用CLI用户可以跳过本章,或者继续阅读来了解它是怎么工作的。 | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  | .l-main-section | 
					
						
							|  |  |  |  | :marked | 
					
						
							|  |  |  |  |   ## _Component-Relative_ Paths | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  |   ## _组件相对_路径 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   Our goal is to specify template and style URLs *relative* to their component class files, | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |   hence the term ***component-relative path***. | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-20 10:59:00 +01:00
										 |  |  |  |   目标是把模板和样式表的URL指定为*相对*于组件类的路径,因此得名***组件相对路径***。 | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |   The key to success is following a convention that puts related component files in well-known locations. | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |   成功的关键是遵循一个约定:把相对组件的文件放进众所周知的位置。 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |   We recommend keeping component template and component-specific style files as *siblings* of their | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  |   companion component class files. | 
					
						
							|  |  |  |  |   Here we see the three files for `SomeComponent` sitting next to each other in the `app` folder. | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-20 10:59:00 +01:00
										 |  |  |  |   建议把组件的模板和组件特有的样式表文件作为组件类文件的“兄弟”。 | 
					
						
							|  |  |  |  |   这里在`app`目录下依次有`SomeComponent`的三个文件。 | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  | .filetree | 
					
						
							|  |  |  |  |   .file app | 
					
						
							|  |  |  |  |     .children | 
					
						
							|  |  |  |  |       .file some.component.css | 
					
						
							|  |  |  |  |       .file some.component.html | 
					
						
							|  |  |  |  |       .file some.component.ts | 
					
						
							|  |  |  |  |     .file ... | 
					
						
							|  |  |  |  | :marked | 
					
						
							|  |  |  |  |   We'll have more files and folders — and greater folder depth — as our application grows. | 
					
						
							|  |  |  |  |   We'll be fine as long as the component files travel together as the inseparable siblings they are. | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-20 10:59:00 +01:00
										 |  |  |  |   当应用规模增长后,还会有更多的文件和目录,目录深度也会增加。 | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  |   如果组件的所有文件总是像形影不离的兄弟那样共进退,那该多好啊! | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |   ### Set the *moduleId* | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  |   ### 设置*moduleId* | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |   Having adopted this file structure convention, we can specify locations of the template and style files | 
					
						
							|  |  |  |  |   relative to the component class file simply by setting the `moduleId` property of the `@Component` metadata like this | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-20 10:59:00 +01:00
										 |  |  |  |   采用这种文件结构约定,可以为模板和样式表文件指定相对于组件类文件的位置 —— 只要简单的在`@Component`元数据中设置`moduleId`属性就可以了,就像这样: | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  | +makeExample('cb-component-relative-paths/ts/app/some.component.ts','module-id')(format='.') | 
					
						
							|  |  |  |  | :marked | 
					
						
							|  |  |  |  |   We strip the `app/` base path from the `templateUrl` and `styleUrls`. The result looks like this: | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-20 10:59:00 +01:00
										 |  |  |  |   从`templateUrl`和`styleUrls`中把基准路径`app/`去掉了。结果是这样的: | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  | +makeExample('cb-component-relative-paths/ts/app/some.component.ts','relative-config')(format='.') | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | .alert.is-helpful | 
					
						
							|  |  |  |  |   :marked | 
					
						
							| 
									
										
										
										
											2016-08-21 14:03:58 +02:00
										 |  |  |  |     Webpack users may prefer [an alternative approach](#webpack). | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-08 17:20:01 +08:00
										 |  |  |  |     Webpack用户可能更喜欢[一个替代方案](#webpack)。 | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  | .l-main-section | 
					
						
							|  |  |  |  | :marked | 
					
						
							|  |  |  |  |   ## Source | 
					
						
							|  |  |  |  |    | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  |   ## 源码 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-30 21:00:52 -05:00
										 |  |  |  |   **We can see the <live-example name="cb-component-relative-paths"></live-example>** | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |   and download the source code from there | 
					
						
							|  |  |  |  |   or simply read the pertinent source here. | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-06 19:52:08 +08:00
										 |  |  |  |   **参见<live-example name="cb-component-relative-paths"></live-example>**,并从中下载源码或只在这里阅读相关源码。 | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  | +makeTabs( | 
					
						
							|  |  |  |  |   `cb-component-relative-paths/ts/app/some.component.ts, | 
					
						
							|  |  |  |  |   cb-component-relative-paths/ts/app/some.component.html, | 
					
						
							|  |  |  |  |   cb-component-relative-paths/ts/app/some.component.css, | 
					
						
							|  |  |  |  |   cb-component-relative-paths/ts/app/app.component.ts`, | 
					
						
							|  |  |  |  |   null, | 
					
						
							| 
									
										
										
										
											2016-05-20 19:07:01 -07:00
										 |  |  |  |   `app/some.component.ts, app/some.component.html, app/some.component.css, app/app.component.ts`) | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | a#why-default | 
					
						
							|  |  |  |  | .l-main-section | 
					
						
							|  |  |  |  | :marked | 
					
						
							|  |  |  |  |   ## Appendix: why *component-relative* is not the default | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  |   ## 附录:为什么*组件相对路径*不是默认方式 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |   A *component-relative* path is obviously superior to an *absolute* path. | 
					
						
							|  |  |  |  |   Why did Angular default to the *absolute* path? | 
					
						
							|  |  |  |  |   Why do *we* have to set the `moduleId`? Why can't Angular set it? | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |   *组件相对路径*明显比*绝对路径*高级一点。 | 
					
						
							|  |  |  |  |   为什么Angular默认采用了*绝对路径*呢? | 
					
						
							|  |  |  |  |   为什么*我们*不得不设置`moduleId`呢?Angular为什么不能自己设置它? | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |   First, let's look at what happens if we use a relative path and omit the `moduleId`. | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |   首先,如果只使用相对路径而省略掉`moduleId`,我们来看看会发生什么。 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   `EXCEPTION: Failed to load some.component.html` | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |   `EXCEPTION: Failed to load some.component.html` | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   Angular can't find the file so it throws an error. | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |   Angular找不到这个文件,所以它抛出一个错误。 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   Why can't Angular calculate the template and style URLs from the component file's location? | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   为什么Angular不能相对于组件类文件的路径来自动计算模板和样式表的URL呢? | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |   Because the location of the component can't be determined without the developer's help. | 
					
						
							|  |  |  |  |   Angular apps can be loaded in many ways: from individual files, from SystemJS packages, or | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  |   from CommonJS packages, to name a few. | 
					
						
							|  |  |  |  |   We might generate modules in any of several formats. | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |   We might not be writing modular code at all! | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |   因为如果没有开发人员的帮助,组件的位置是检测不到的。 | 
					
						
							|  |  |  |  |   Angular应用可能被用多种方式加载:SystemJS包、CommonJS包等等。 | 
					
						
							| 
									
										
										
										
											2016-06-20 10:59:00 +01:00
										 |  |  |  |   用来生成模块的格式可以是任何格式。 | 
					
						
							|  |  |  |  |   甚至可能完全没有写成模块化代码。 | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |   With this diversity of packaging and module load strategies, | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |   it's not possible for Angular to know with certainty where these files reside at runtime. | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  |   由于存在这么多打包和模块加载策略,所以Angular不可能知道在运行期这些文件的正确位置。 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |   The only location Angular can be sure of is the URL of the `index.html` home page, the application root. | 
					
						
							|  |  |  |  |   So by default it resolves template and style paths relative to the URL of `index.html`. | 
					
						
							|  |  |  |  |   That's why we previously wrote our file URLs with an `app/` base path prefix. | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  |   Angular能够确定的唯一的位置是首页`index.html`的URL,也就是应用的根目录。 | 
					
						
							|  |  |  |  |   所以,默认情况下,它只能计算相对于`index.html`的模板和样式表路径。 | 
					
						
							|  |  |  |  |   这就是为什么我们以前用`app/`基准路径的前缀来写文件的URL。 | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |   But *if* we follow the recommended guidelines and we write modules in `commonjs` format | 
					
						
							|  |  |  |  |   and we use a module loader that *plays nice*, | 
					
						
							|  |  |  |  |   *then* we — the developers of the application — | 
					
						
							|  |  |  |  |   know that the semi-global `module.id` variable is available and contains | 
					
						
							|  |  |  |  |   the absolute URL of the component class module file. | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-20 10:59:00 +01:00
										 |  |  |  |   但是,*如果*遵循建议的指导原则,用`commonjs`格式编写模块,并使用一个*不错的*模块加载器, | 
					
						
							|  |  |  |  |   我们要知道,有一个可用的半全局变量`module.id`,它包含组件类模块文件的绝对URL。 | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |   That knowledge enables us to tell Angular where the *component* file is | 
					
						
							|  |  |  |  |   by setting the `moduleId`: | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |   这种认知让我们得以通过设置`moduleId`来告诉Angular*组件类*文件在哪里: | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  | +makeExample('cb-component-relative-paths/ts/app/some.component.ts','module-id')(format='.') | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | a#webpack | 
					
						
							|  |  |  |  | .l-main-section | 
					
						
							|  |  |  |  | :marked | 
					
						
							| 
									
										
										
										
											2016-08-21 14:03:58 +02:00
										 |  |  |  |   ## Webpack: load templates and styles | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-08 17:20:01 +08:00
										 |  |  |  |   ## Webpack: 加载模板和样式表 | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |   Webpack developers have an alternative to `moduleId`. | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-09 14:34:12 +01:00
										 |  |  |  |   Webpack开发者可以采用`moduleId`的另一个替代方案。 | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-21 14:03:58 +02:00
										 |  |  |  |   They can load templates and styles at runtime by adding `./` at the beginning of the `template` and `styles` / `styleUrls` | 
					
						
							|  |  |  |  |   properties that reference *component-relative URLS. | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  |    | 
					
						
							| 
									
										
										
										
											2016-09-08 17:20:01 +08:00
										 |  |  |  |   通过让组件元数据中的`template`和`styles` / `styleUrls`属性以`./`开头,并使其指向相对于组件的URL,可以在运行期间为它们加载模板和样式表。 | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  | +makeExample('webpack/ts/src/app/app.component.ts')(format='.') | 
					
						
							| 
									
										
										
										
											2016-08-21 14:03:58 +02:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | .l-sub-section | 
					
						
							|  |  |  |  |   :marked | 
					
						
							|  |  |  |  |     Webpack will do a `require` behind the scenes to load the templates and styles. Read more [here](../guide/webpack.html#highlights). | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-10 18:31:38 +08:00
										 |  |  |  |     Webpack将会在幕后执行一次`require`来加载这些模板和样式。要了解更多,请参阅[这里](../guide/webpack.html#highlights)。 | 
					
						
							| 
									
										
										
										
											2016-05-20 15:14:13 -07:00
										 |  |  |  | :marked | 
					
						
							|  |  |  |  |   See the [Introduction to Webpack](../guide/webpack.html). | 
					
						
							| 
									
										
										
										
											2016-06-01 18:34:02 +08:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  |   参见[Webpack简介](../guide/webpack.html)。 |