fix: 把遗漏的 我们 替换成 你
This commit is contained in:
parent
a523fbdedb
commit
d0292bbe82
|
@ -24,7 +24,7 @@ Angular takes over, presenting your application content in a browser and
|
||||||
responding to user interactions according to the instructions you've provided.
|
responding to user interactions according to the instructions you've provided.
|
||||||
|
|
||||||
然后,你通过*引导**根模块*来启动该应用。
|
然后,你通过*引导**根模块*来启动该应用。
|
||||||
Angular 在浏览器中接管、展现应用的内容,并根据我们提供的操作指令响应用户的交互。
|
Angular 在浏览器中接管、展现应用的内容,并根据你提供的操作指令响应用户的交互。
|
||||||
|
|
||||||
Of course, there is more to it than this.
|
Of course, there is more to it than this.
|
||||||
You'll learn the details in the pages that follow. For now, focus on the big picture.
|
You'll learn the details in the pages that follow. For now, focus on the big picture.
|
||||||
|
@ -176,7 +176,7 @@ JavaScript 中,每个*文件*是一个模块,文件中定义的所有对象
|
||||||
|
|
||||||
These are two different and _complementary_ module systems. Use them both to write your apps.
|
These are two different and _complementary_ module systems. Use them both to write your apps.
|
||||||
|
|
||||||
这两个模块化系统是不同但*互补*的,我们在写程序时都会用到。
|
这两个模块化系统是不同但*互补*的,你在写程序时都会用到。
|
||||||
|
|
||||||
### Angular libraries
|
### Angular libraries
|
||||||
|
|
||||||
|
@ -688,7 +688,7 @@ Angular 不会*强行保障*这些原则。
|
||||||
Angular does help you *follow* these principles by making it easy to factor your
|
Angular does help you *follow* these principles by making it easy to factor your
|
||||||
application logic into services and make those services available to components through *dependency injection*.
|
application logic into services and make those services available to components through *dependency injection*.
|
||||||
|
|
||||||
Angular 帮助你*遵循*这些原则 —— 它让我们能轻易地把应用逻辑拆分到服务,并通过*依赖注入*来在组件中使用这些服务。
|
Angular 帮助你*遵循*这些原则 —— 它让你能轻易地把应用逻辑拆分到服务,并通过*依赖注入*来在组件中使用这些服务。
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ For every Angular component you write, you may define not only an HTML template,
|
||||||
but also the CSS styles that go with that template,
|
but also the CSS styles that go with that template,
|
||||||
specifying any selectors, rules, and media queries that you need.
|
specifying any selectors, rules, and media queries that you need.
|
||||||
|
|
||||||
对你编写的每个 Angular 组件来说,除了定义 HTML 模板之外,我们还要定义用于模板的 CSS 样式、
|
对你编写的每个 Angular 组件来说,除了定义 HTML 模板之外,还要定义用于模板的 CSS 样式、
|
||||||
指定任意的选择器、规则和媒体查询。
|
指定任意的选择器、规则和媒体查询。
|
||||||
|
|
||||||
One way to do this is to set the `styles` property in the component metadata.
|
One way to do this is to set the `styles` property in the component metadata.
|
||||||
|
|
|
@ -90,7 +90,7 @@ What does `Engine` depend upon? What does that dependency depend on?
|
||||||
Will a new instance of `Engine` make an asynchronous call to the server?
|
Will a new instance of `Engine` make an asynchronous call to the server?
|
||||||
You certainly don't want that going on during tests.
|
You certainly don't want that going on during tests.
|
||||||
|
|
||||||
当给 `Car` 类写测试的时候,我们就会受制于它背后的那些依赖。
|
当给 `Car` 类写测试的时候,你就会受制于它背后的那些依赖。
|
||||||
能在测试环境中成功创建新的 `Engine` 吗?
|
能在测试环境中成功创建新的 `Engine` 吗?
|
||||||
`Engine` 自己又依赖什么?那些依赖本身又依赖什么?
|
`Engine` 自己又依赖什么?那些依赖本身又依赖什么?
|
||||||
`Engine` 的新实例会发起到服务器的异步调用吗?
|
`Engine` 的新实例会发起到服务器的异步调用吗?
|
||||||
|
|
|
@ -334,7 +334,7 @@ See also the [*APP_BASE_HREF*](api/common/APP_BASE_HREF "API: APP_BASE_HREF") al
|
||||||
In development, you typically start the server in the folder that holds `index.html`.
|
In development, you typically start the server in the folder that holds `index.html`.
|
||||||
That's the root folder and you'd add `<base href="/">` near the top of `index.html` because `/` is the root of the app.
|
That's the root folder and you'd add `<base href="/">` near the top of `index.html` because `/` is the root of the app.
|
||||||
|
|
||||||
在开发期间,你通常会在 `index.html` 所在的目录中启动服务器。这个目录就是根目录,因为 `/` 就是本应用的根,所以我们要在 `index.html` 的顶部添加 `<base href="/">`。
|
在开发期间,你通常会在 `index.html` 所在的目录中启动服务器。这个目录就是根目录,因为 `/` 就是本应用的根,所以你要在 `index.html` 的顶部添加 `<base href="/">`。
|
||||||
|
|
||||||
But on the shared or production server, you might serve the app from a subfolder.
|
But on the shared or production server, you might serve the app from a subfolder.
|
||||||
For example, when the URL to load the app is something like `http://www.mysite.com/my/app/`,
|
For example, when the URL to load the app is something like `http://www.mysite.com/my/app/`,
|
||||||
|
|
|
@ -109,7 +109,7 @@ the view, such as a keystroke, a timer completion, or a response to an HTTP requ
|
||||||
Notice that you don't call **new** to create an instance of the `AppComponent` class.
|
Notice that you don't call **new** to create an instance of the `AppComponent` class.
|
||||||
Angular is creating an instance for you. How?
|
Angular is creating an instance for you. How?
|
||||||
|
|
||||||
注意,你没有调用 **new** 来创建 `AppComponent` 类的实例,是 Angular 替我们创建了它。那么它是如何创建的呢?
|
注意,你没有调用 **new** 来创建 `AppComponent` 类的实例,是 Angular 替你创建了它。那么它是如何创建的呢?
|
||||||
|
|
||||||
The CSS `selector` in the `@Component` decorator specifies an element named `<app-root>`.
|
The CSS `selector` in the `@Component` decorator specifies an element named `<app-root>`.
|
||||||
That element is a placeholder in the body of your `index.html` file:
|
That element is a placeholder in the body of your `index.html` file:
|
||||||
|
@ -382,7 +382,7 @@ Sometimes an app needs to display a view or a portion of a view only under speci
|
||||||
|
|
||||||
Let's change the example to display a message if there are more than three heroes.
|
Let's change the example to display a message if there are more than three heroes.
|
||||||
|
|
||||||
让我们来修改这个例子,如果多于三位英雄,显示一条消息。
|
来改一下这个例子,如果多于三位英雄,显示一条消息。
|
||||||
|
|
||||||
The Angular `ngIf` directive inserts or removes an element based on a _truthy/falsy_ condition.
|
The Angular `ngIf` directive inserts or removes an element based on a _truthy/falsy_ condition.
|
||||||
To see it in action, add the following paragraph at the bottom of the template:
|
To see it in action, add the following paragraph at the bottom of the template:
|
||||||
|
|
|
@ -175,7 +175,7 @@ exists on this specific instance of the component. How do you know it's
|
||||||
this specific instance? Because it's referring to `adHost` and `adHost` is the
|
this specific instance? Because it's referring to `adHost` and `adHost` is the
|
||||||
directive you set up earlier to tell Angular where to insert dynamic components.
|
directive you set up earlier to tell Angular where to insert dynamic components.
|
||||||
|
|
||||||
接下来,你要把 `viewContainerRef` 指向这个组件的现有实例。但我们怎么才能找到这个实例呢?
|
接下来,你要把 `viewContainerRef` 指向这个组件的现有实例。但你怎么才能找到这个实例呢?
|
||||||
很简单,因为它指向了 `adHost`,而这个 `adHost` 就是你以前设置过的指令,用来告诉 Angular 该把动态组件插入到什么位置。
|
很简单,因为它指向了 `adHost`,而这个 `adHost` 就是你以前设置过的指令,用来告诉 Angular 该把动态组件插入到什么位置。
|
||||||
|
|
||||||
As you may recall, `AdDirective` injects `ViewContainerRef` into its constructor.
|
As you may recall, `AdDirective` injects `ViewContainerRef` into its constructor.
|
||||||
|
|
|
@ -251,7 +251,7 @@ to the `FormControl`.
|
||||||
In template-driven forms, you don't have direct access to the `FormControl` instance, so you can't pass the
|
In template-driven forms, you don't have direct access to the `FormControl` instance, so you can't pass the
|
||||||
validator in like you can for reactive forms. Instead, you need to add a directive to the template.
|
validator in like you can for reactive forms. Instead, you need to add a directive to the template.
|
||||||
|
|
||||||
在模板驱动表单中,你不用直接访问 `FormControl` 实例。所以我们不能像响应式表单中那样把验证器传进去,而应该在模板中添加一个指令。
|
在模板驱动表单中,你不用直接访问 `FormControl` 实例。所以不能像响应式表单中那样把验证器传进去,而应该在模板中添加一个指令。
|
||||||
|
|
||||||
The corresponding `ForbiddenValidatorDirective` serves as a wrapper around the `forbiddenNameValidator`.
|
The corresponding `ForbiddenValidatorDirective` serves as a wrapper around the `forbiddenNameValidator`.
|
||||||
|
|
||||||
|
|
|
@ -846,7 +846,7 @@ The `ng-valid`/`ng-invalid` pair is the most interesting, because you want to se
|
||||||
strong visual signal when the values are invalid. You also want to mark required fields.
|
strong visual signal when the values are invalid. You also want to mark required fields.
|
||||||
To create such visual feedback, add definitions for the `ng-*` CSS classes.
|
To create such visual feedback, add definitions for the `ng-*` CSS classes.
|
||||||
|
|
||||||
(`ng-valid` | `ng-invalid`)这一对是你最感兴趣的。当数据变得无效时,我们希望发出强力的视觉信号,
|
(`ng-valid` | `ng-invalid`)这一对是最有趣的部分,因为当数据变得无效时,你希望发出强力的视觉信号,
|
||||||
还想要标记出必填字段。可以通过加入自定义 CSS 来提供视觉反馈。
|
还想要标记出必填字段。可以通过加入自定义 CSS 来提供视觉反馈。
|
||||||
|
|
||||||
*Delete* the `#spy` template reference variable and the `TODO` as they have served their purpose.
|
*Delete* the `#spy` template reference variable and the `TODO` as they have served their purpose.
|
||||||
|
@ -891,7 +891,7 @@ You can improve the form. The _Name_ input box is required and clearing it turns
|
||||||
That says something is wrong but the user doesn't know *what* is wrong or what to do about it.
|
That says something is wrong but the user doesn't know *what* is wrong or what to do about it.
|
||||||
Leverage the control's state to reveal a helpful message.
|
Leverage the control's state to reveal a helpful message.
|
||||||
|
|
||||||
你还能做的更好。“Name” 输入框是必填的,清空它会让左侧的条变红。这表示*某些东西*是错的,但我们不知道错在哪里,或者如何纠正。
|
你还能做的更好。“Name” 输入框是必填的,清空它会让左侧的条变红。这表示*某些东西*是错的,但用户不知道错在哪里,或者如何纠正。
|
||||||
可以借助 `ng-invalid` 类来给出有用的提示。
|
可以借助 `ng-invalid` 类来给出有用的提示。
|
||||||
|
|
||||||
When the user deletes the name, the form should look like this:
|
When the user deletes the name, the form should look like this:
|
||||||
|
|
|
@ -1459,7 +1459,7 @@ by returning an observable of simulated events.
|
||||||
|
|
||||||
[Cross-Site Request Forgery (XSRF)](https://en.wikipedia.org/wiki/Cross-site_request_forgery) is an attack technique by which the attacker can trick an authenticated user into unknowingly executing actions on your website. `HttpClient` supports a [common mechanism](https://en.wikipedia.org/wiki/Cross-site_request_forgery#Cookie-to-Header_Token) used to prevent XSRF attacks. When performing HTTP requests, an interceptor reads a token from a cookie, by default `XSRF-TOKEN`, and sets it as an HTTP header, `X-XSRF-TOKEN`. Since only code that runs on your domain could read the cookie, the backend can be certain that the HTTP request came from your client application and not an attacker.
|
[Cross-Site Request Forgery (XSRF)](https://en.wikipedia.org/wiki/Cross-site_request_forgery) is an attack technique by which the attacker can trick an authenticated user into unknowingly executing actions on your website. `HttpClient` supports a [common mechanism](https://en.wikipedia.org/wiki/Cross-site_request_forgery#Cookie-to-Header_Token) used to prevent XSRF attacks. When performing HTTP requests, an interceptor reads a token from a cookie, by default `XSRF-TOKEN`, and sets it as an HTTP header, `X-XSRF-TOKEN`. Since only code that runs on your domain could read the cookie, the backend can be certain that the HTTP request came from your client application and not an attacker.
|
||||||
|
|
||||||
[跨站请求伪造 (XSRF)](https://en.wikipedia.org/wiki/Cross-site_request_forgery)是一个攻击技术,它能让攻击者假冒一个已认证的用户在你的网站上执行未知的操作。`HttpClient` 支持一种[通用的机制](https://en.wikipedia.org/wiki/Cross-site_request_forgery#Cookie-to-Header_Token)来防范 XSRF 攻击。当执行 HTTP 请求时,一个拦截器会从 cookie 中读取 XSRF 令牌(默认名字为 `XSRF-TOKEN`),并且把它设置为一个 HTTP 头 `X-XSRF-TOKEN`,由于只有运行在你自己的域名下的代码才能读取这个 cookie,因此后端可以确认这个 HTTP 请求真的来自我们的客户端应用,而不是攻击者。
|
[跨站请求伪造 (XSRF)](https://en.wikipedia.org/wiki/Cross-site_request_forgery)是一个攻击技术,它能让攻击者假冒一个已认证的用户在你的网站上执行未知的操作。`HttpClient` 支持一种[通用的机制](https://en.wikipedia.org/wiki/Cross-site_request_forgery#Cookie-to-Header_Token)来防范 XSRF 攻击。当执行 HTTP 请求时,一个拦截器会从 cookie 中读取 XSRF 令牌(默认名字为 `XSRF-TOKEN`),并且把它设置为一个 HTTP 头 `X-XSRF-TOKEN`,由于只有运行在你自己的域名下的代码才能读取这个 cookie,因此后端可以确认这个 HTTP 请求真的来自你的客户端应用,而不是攻击者。
|
||||||
|
|
||||||
By default, an interceptor sends this cookie on all mutating requests (POST, etc.)
|
By default, an interceptor sends this cookie on all mutating requests (POST, etc.)
|
||||||
to relative URLs but not on GET/HEAD requests or
|
to relative URLs but not on GET/HEAD requests or
|
||||||
|
@ -1646,7 +1646,7 @@ It takes the same arguments but returns an array of matching requests.
|
||||||
Once returned, these requests are removed from future matching and
|
Once returned, these requests are removed from future matching and
|
||||||
you are responsible for flushing and verifying them.
|
you are responsible for flushing and verifying them.
|
||||||
|
|
||||||
如果你需要在测试中对重复的请求进行响应,可以使用 `match()` API 来代替 `expectOne()`,它的参数不变,但会返回一个与这些请求相匹配的数组。一旦返回,这些请求就会从将来要匹配的列表中移除,我们要自己验证和刷新(flush)它。
|
如果你需要在测试中对重复的请求进行响应,可以使用 `match()` API 来代替 `expectOne()`,它的参数不变,但会返回一个与这些请求相匹配的数组。一旦返回,这些请求就会从将来要匹配的列表中移除,你要自己验证和刷新(flush)它。
|
||||||
|
|
||||||
<code-example
|
<code-example
|
||||||
path="http/src/testing/http-client.spec.ts"
|
path="http/src/testing/http-client.spec.ts"
|
||||||
|
|
|
@ -793,7 +793,7 @@ To prevent this issue, write a constructor that attempts to inject the module or
|
||||||
from the root app injector. If the injection succeeds, the class has been loaded a second time.
|
from the root app injector. If the injection succeeds, the class has been loaded a second time.
|
||||||
You can throw an error or take other remedial action.
|
You can throw an error or take other remedial action.
|
||||||
|
|
||||||
为了防范这种风险,可以写一个构造函数,它会尝试从应用的根注入器中注入该模块或服务。如果这种注入成功了,那就说明这个类是被第二次加载的,我们就可以抛出一个错误,或者采取其它挽救措施。
|
为了防范这种风险,可以写一个构造函数,它会尝试从应用的根注入器中注入该模块或服务。如果这种注入成功了,那就说明这个类是被第二次加载的,你就可以抛出一个错误,或者采取其它挽救措施。
|
||||||
|
|
||||||
Certain NgModules, such as `BrowserModule`, implement such a guard.
|
Certain NgModules, such as `BrowserModule`, implement such a guard.
|
||||||
Here is a custom constructor for an NgModule called `CoreModule`.
|
Here is a custom constructor for an NgModule called `CoreModule`.
|
||||||
|
|
|
@ -268,7 +268,7 @@ You can remove packages that you don't need but how can you be sure that you won
|
||||||
As a practical matter, it's better to install a package you don't need than worry about it.
|
As a practical matter, it's better to install a package you don't need than worry about it.
|
||||||
Extra packages and package files on your local development machine are harmless.
|
Extra packages and package files on your local development machine are harmless.
|
||||||
|
|
||||||
你可以移除这些不需要的包,不过我们怎么知道哪些是不需要的呢?
|
你可以移除这些不需要的包,不过你怎么知道哪些是不需要的呢?
|
||||||
实际上,安装不需要的包好过担心缺少某个包。
|
实际上,安装不需要的包好过担心缺少某个包。
|
||||||
在你本机开发环境下存在无用的包和文件并没有害处。
|
在你本机开发环境下存在无用的包和文件并没有害处。
|
||||||
|
|
||||||
|
|
|
@ -163,7 +163,7 @@ When creating an observable you should determine how you want that observable to
|
||||||
|
|
||||||
Let’s look at an example that counts from 1 to 3, with a one-second delay after each number emitted.
|
Let’s look at an example that counts from 1 to 3, with a one-second delay after each number emitted.
|
||||||
|
|
||||||
我们来看一个从 1 到 3 进行计数的例子,它每发出一个数字就会等待 1 秒。
|
来看一个从 1 到 3 进行计数的例子,它每发出一个数字就会等待 1 秒。
|
||||||
|
|
||||||
<code-example path="observables/src/multicasting.ts" region="delay_sequence" title="Create a delayed sequence"></code-example>
|
<code-example path="observables/src/multicasting.ts" region="delay_sequence" title="Create a delayed sequence"></code-example>
|
||||||
|
|
||||||
|
|
|
@ -677,7 +677,7 @@ In the previous code sample, the second `fetch` pipe binding demonstrates more p
|
||||||
It displays the same hero data in JSON format by chaining through to the built-in `JsonPipe`.
|
It displays the same hero data in JSON format by chaining through to the built-in `JsonPipe`.
|
||||||
|
|
||||||
第二个绑定除了用到 `FetchPipe` 之外还链接了更多管道。
|
第二个绑定除了用到 `FetchPipe` 之外还链接了更多管道。
|
||||||
它把获取数据的结果同时显示在第一个绑定和第二个绑定中。第二个绑定中,我们通过链接到一个内置管道 `JsonPipe` 把它转成了 JSON 格式。
|
它通过串联上内置管道 `JsonPipe` 来把英雄数据显示成了 JSON 格式。
|
||||||
|
|
||||||
<div class="callout is-helpful">
|
<div class="callout is-helpful">
|
||||||
|
|
||||||
|
|
|
@ -1355,7 +1355,7 @@ Then return here to learn about _form array_ properties.
|
||||||
So far, you've seen `FormControls` and `FormGroups`.
|
So far, you've seen `FormControls` and `FormGroups`.
|
||||||
A `FormGroup` is a named object whose property values are `FormControls` and other `FormGroups`.
|
A `FormGroup` is a named object whose property values are `FormControls` and other `FormGroups`.
|
||||||
|
|
||||||
以前,我们见过了 `FormControl` 和 `FormGroup`。
|
以前,你已见过 `FormControl` 和 `FormGroup`。
|
||||||
`FormGroup` 是一个命名对象,它的属性值是 `FormControl` 和其它的 `FormGroup`。
|
`FormGroup` 是一个命名对象,它的属性值是 `FormControl` 和其它的 `FormGroup`。
|
||||||
|
|
||||||
Sometimes you need to present an arbitrary number of controls or groups.
|
Sometimes you need to present an arbitrary number of controls or groups.
|
||||||
|
|
|
@ -1165,7 +1165,7 @@ for navigation. Thanks to `pushState`, you can make in-app URL paths look the wa
|
||||||
look, e.g. `localhost:3000/crisis-center`. The in-app URLs can be indistinguishable from server URLs.
|
look, e.g. `localhost:3000/crisis-center`. The in-app URLs can be indistinguishable from server URLs.
|
||||||
|
|
||||||
路由器使用浏览器的<a href="https://developer.mozilla.org/en-US/docs/Web/API/History_API#Adding_and_modifying_history_entries" target="_blank" title="HTML5 browser history push-state">history.pushState</a>进行导航。
|
路由器使用浏览器的<a href="https://developer.mozilla.org/en-US/docs/Web/API/History_API#Adding_and_modifying_history_entries" target="_blank" title="HTML5 browser history push-state">history.pushState</a>进行导航。
|
||||||
感谢 `pushState`!有了它,你就能按所期望的样子来显示应用内部的 URL 路径,比如:`localhost:3000/crisis-center`。虽然我们使用的全部是客户端合成的视图,但应用内部的这些 URL 看起来和来自服务器的没有什么不同。
|
感谢 `pushState`!有了它,你就能按所期望的样子来显示应用内部的 URL 路径,比如:`localhost:3000/crisis-center`。虽然你使用的全部是客户端合成的视图,但应用内部的这些 URL 看起来和来自服务器的没有什么不同。
|
||||||
|
|
||||||
Modern HTML5 browsers were the first to support `pushState` which is why many people refer to these URLs as
|
Modern HTML5 browsers were the first to support `pushState` which is why many people refer to these URLs as
|
||||||
"HTML5 style" URLs.
|
"HTML5 style" URLs.
|
||||||
|
@ -1981,7 +1981,7 @@ While you could continue to add files to the `src/app/` folder,
|
||||||
that is unrealistic and ultimately not maintainable.
|
that is unrealistic and ultimately not maintainable.
|
||||||
Most developers prefer to put each feature area in its own folder.
|
Most developers prefer to put each feature area in its own folder.
|
||||||
|
|
||||||
虽然我们也可以把文件都放在 `src/app/` 目录下,但那样是不现实的,而且很难维护。
|
虽然你也可以把文件都放在 `src/app/` 目录下,但那样是不现实的,而且很难维护。
|
||||||
大部分开发人员更喜欢把每个特性区都放在它自己的目录下。
|
大部分开发人员更喜欢把每个特性区都放在它自己的目录下。
|
||||||
|
|
||||||
You are about to break up the app into different *feature modules*, each with its own concerns.
|
You are about to break up the app into different *feature modules*, each with its own concerns.
|
||||||
|
@ -2166,7 +2166,7 @@ In the `AppRoutingModule`, you used the static **`RouterModule.forRoot`** method
|
||||||
In a feature module you use the static **`forChild`** method.
|
In a feature module you use the static **`forChild`** method.
|
||||||
|
|
||||||
这里有少量但是关键的不同点。
|
这里有少量但是关键的不同点。
|
||||||
在 `AppRoutingModule` 中,你使用了静态的 `RouterModule.`**`forRoot`**方法来注册我们的路由和全应用级服务提供商。
|
在 `AppRoutingModule` 中,你使用了静态的 `RouterModule.`**`forRoot`**方法来注册路由和全应用级服务提供商。
|
||||||
在特性模块中,你要改用**`forChild`**静态方法。
|
在特性模块中,你要改用**`forChild`**静态方法。
|
||||||
|
|
||||||
<div class="l-sub-section">
|
<div class="l-sub-section">
|
||||||
|
@ -4108,7 +4108,7 @@ You could permit access only to authenticated users or to users with a specific
|
||||||
You might block or limit access until the user's account is activated.
|
You might block or limit access until the user's account is activated.
|
||||||
|
|
||||||
应用程序通常会根据访问者来决定是否授予某个特性区的访问权。
|
应用程序通常会根据访问者来决定是否授予某个特性区的访问权。
|
||||||
我们可以只对已认证过的用户或具有特定角色的用户授予访问权,还可以阻止或限制用户访问权,直到用户账户激活为止。
|
你可以只对已认证过的用户或具有特定角色的用户授予访问权,还可以阻止或限制用户访问权,直到用户账户激活为止。
|
||||||
|
|
||||||
The `CanActivate` guard is the tool to manage these navigation business rules.
|
The `CanActivate` guard is the tool to manage these navigation business rules.
|
||||||
|
|
||||||
|
@ -4247,7 +4247,7 @@ property but it's not using a `component`.
|
||||||
You haven't made a mistake in the configuration.
|
You haven't made a mistake in the configuration.
|
||||||
You've defined a _component-less_ route.
|
You've defined a _component-less_ route.
|
||||||
|
|
||||||
来看 `AdminComponent` 下的子路由,我们有一个带 **path** 和 **children** 的子路由,
|
来看 `AdminComponent` 下的子路由,这里有一个带 **path** 和 **children** 的子路由,
|
||||||
但它没有使用 **component**。这并不是配置中的失误,而是在使用**无组件**路由。
|
但它没有使用 **component**。这并不是配置中的失误,而是在使用**无组件**路由。
|
||||||
|
|
||||||
The goal is to group the `Crisis Center` management routes under the `admin` path.
|
The goal is to group the `Crisis Center` management routes under the `admin` path.
|
||||||
|
@ -4511,7 +4511,7 @@ If the user cancels, you'll stay put and allow more changes.
|
||||||
If the user approves, the app can save.
|
If the user approves, the app can save.
|
||||||
|
|
||||||
最好能暂停,并让用户决定该怎么做。
|
最好能暂停,并让用户决定该怎么做。
|
||||||
如果用户选择了取消,我们就留下来,并允许更多改动。
|
如果用户选择了取消,你就留下来,并允许更多改动。
|
||||||
如果用户选择了确认,那就进行保存。
|
如果用户选择了确认,那就进行保存。
|
||||||
|
|
||||||
You still might delay navigation until the save succeeds.
|
You still might delay navigation until the save succeeds.
|
||||||
|
@ -5501,7 +5501,7 @@ So instead, you'll update the empty path route in `app-routing.module.ts` to red
|
||||||
|
|
||||||
Since `RouterLink`s aren't tied to route configuration, you'll need to update the associated router links so they remain active when the new route is active. You'll update the `app.component.ts` template for the `/heroes` routerLink.
|
Since `RouterLink`s aren't tied to route configuration, you'll need to update the associated router links so they remain active when the new route is active. You'll update the `app.component.ts` template for the `/heroes` routerLink.
|
||||||
|
|
||||||
由于 `RouterLink` 指令没有关联到路由配置,所以你需要修改相关的路由链接,以便在新的路由激活时,它们也能保持激活状态。我们要修改 `app.component.ts` 模板中的 `/heroes` 路由链接。
|
由于 `RouterLink` 指令没有关联到路由配置,所以你需要修改相关的路由链接,以便在新的路由激活时,它们也能保持激活状态。你要修改 `app.component.ts` 模板中的 `/heroes` 路由链接。
|
||||||
|
|
||||||
<code-example path="router/src/app/app.component.ts" linenums="false" title="src/app/app.component.ts (superheroes active routerLink)">
|
<code-example path="router/src/app/app.component.ts" linenums="false" title="src/app/app.component.ts (superheroes active routerLink)">
|
||||||
|
|
||||||
|
|
|
@ -227,7 +227,7 @@ Before applying a structural directive, you might want to pause for a moment
|
||||||
to consider the consequences of adding and removing elements and of creating and destroying components.
|
to consider the consequences of adding and removing elements and of creating and destroying components.
|
||||||
|
|
||||||
**同样的考量也适用于每一个结构型指令,无论是内置的还是自定义的。**
|
**同样的考量也适用于每一个结构型指令,无论是内置的还是自定义的。**
|
||||||
你应该提醒自己以及我们指令的使用者,来仔细考虑添加元素、移除元素以及创建和销毁组件的后果。
|
你应该提醒自己慎重考虑添加元素、移除元素以及创建和销毁组件的后果。
|
||||||
|
|
||||||
{@a asterisk}
|
{@a asterisk}
|
||||||
|
|
||||||
|
|
|
@ -1379,7 +1379,7 @@ bring that application to the brave new world of Angular.
|
||||||
|
|
||||||
在本节和下节中,你将看一个完整的例子,它使用 `upgrade` 模块准备和升级了一个应用程序。
|
在本节和下节中,你将看一个完整的例子,它使用 `upgrade` 模块准备和升级了一个应用程序。
|
||||||
该应用就是来自[原 AngularJS 教程](https://docs.angularjs.org/tutorial)中的[Angular PhoneCat](https://github.com/angular/angular-phonecat)。
|
该应用就是来自[原 AngularJS 教程](https://docs.angularjs.org/tutorial)中的[Angular PhoneCat](https://github.com/angular/angular-phonecat)。
|
||||||
那是我们当初开始 Angular 探险之旅的起点。
|
那是我们很多人当初开始 Angular 探险之旅的地方。
|
||||||
现在,你会看到如何把该应用带入 Angular 的美丽新世界。
|
现在,你会看到如何把该应用带入 Angular 的美丽新世界。
|
||||||
|
|
||||||
During the process you'll learn how to apply the steps outlined in the
|
During the process you'll learn how to apply the steps outlined in the
|
||||||
|
|
|
@ -852,7 +852,7 @@ Reconfigure [Karma](https://karma-runner.github.io/1.0/index.html) to use Webpac
|
||||||
You don't precompile the TypeScript; Webpack transpiles the Typescript files on the fly, in memory, and feeds the emitted JS directly to Karma.
|
You don't precompile the TypeScript; Webpack transpiles the Typescript files on the fly, in memory, and feeds the emitted JS directly to Karma.
|
||||||
There are no temporary files on disk.
|
There are no temporary files on disk.
|
||||||
|
|
||||||
你不用预编译 TypeScript,Webpack 随时在内存中转译我们的 TypeScript 文件,并且把产出的 JS 直接反馈给 Karma。
|
你不用预编译 TypeScript,Webpack 会随时在内存中转译这些 TypeScript 文件,并且把产出的 JS 直接反馈给 Karma。
|
||||||
硬盘上没有任何临时文件。
|
硬盘上没有任何临时文件。
|
||||||
|
|
||||||
The `karma-test-shim` tells Karma what files to pre-load and
|
The `karma-test-shim` tells Karma what files to pre-load and
|
||||||
|
|
Loading…
Reference in New Issue