首頁 > web前端 > js教程 > Angular 4.0的架構使用詳解

Angular 4.0的架構使用詳解

php中世界最好的语言
發布: 2018-04-18 09:35:45
原創
1463 人瀏覽過

這次帶給大家Angular 4.0的架構使用詳解,Angular 4.0架構使用的注意事項有哪些,下面就是實戰案例,一起來看一下。

前言

前段時間Google發布了廣受歡迎的Angular JavaScript框架的4.0版本,該版本致力於縮小生成程式碼的體積,以及保持框架的簡化發布計劃。

我很久沒寫這種比較偏概念類的東西了,不過我覺得沒有形成一個知識架構,學習效率會大打折扣。在這裡把我的所理解的知識分享給大家,部分內容引用自官方文件。下面進入主題

# Angular架構概覽

# 這個架構圖展現了 Angular 應用中的 8 個主要建構塊:

  • 模組(module)

  • 元件(component)

  • #模板(template)

  • 元資料(metadata)

  • 資料綁定 (data binding)

  • #指令(dirctive)

  • 服務(service)

  • 依賴注入 (dependency injection)

# 接下來我會按順序並結合圖來講解一下。

# 1.模組 (module)

# Angular 或 ionic 新建的項目,都會存在一個根模組,預設名稱是 AppModule。如果你使用了模組化來創建應用,包括 AppModule,每個都會存在一個 @NgModule 裝飾器的類別(雖然他很像 java 中的註解,但是他的官方命名叫裝飾器)。我們新建的頁面,如果不使用懶加載,都要在 @NgModule 中先聲明後使用。

以下舉個例子,簡單介紹一下 @NgModule 中的內容

//app.module.ts
import { NgModule }  from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
@NgModule({
 imports:  [ BrowserModule ],
 providers: [ Logger ],
 declarations: [ AppComponent ],
 exports:  [ AppComponent ],
 bootstrap: [ AppComponent ]
})
export class AppModule { }
登入後複製
  • # imports 本模組聲明的元件模板所需的類別所在的其它模組。

  • providers 服務的建立者,並加入到全域服務清單中,可用於套用任何部分。

  • declarations 宣告本模組中擁有的檢視類別。 Angular 有三種視圖類別:元件、指令和管道。

  • exports declarations 的子集,可用於其它模組的元件模板。

  • bootstrap 指定應用程式的主視圖(稱為根元件),它是所有其它視圖的宿主。只有根模組才能設定 bootstrap 屬性。

# 在圖中的意義:看圖左上角,模組是用來接收一個用來描述模組屬性元資料物件的。

2.元件 (component)、範本 (template)、元資料 (metadata)

# 這次我們把這三點一起來講,先來看這段程式碼

//hero-list.component.ts
@Component({
selector: 'hero-list',
templateUrl: './hero-list.component.html',
providers: [ HeroService ]
})
export class HeroListComponent implements OnInit {
/* . . . */
}
登入後複製

Component

# 組件是一個裝飾器,他能接受一個配置對象, Angular 會基於這些資訊創建和展示組件及其視圖。

  • selector:CSS 選擇器,它告訴 Angular 在父級 HTML 中尋找 標籤,建立並插入該元件。

  • templateUrl:元件 HTML 模板的模組相對位址,如果使用 template 來寫的話是用「`」這個符號來直接寫 HTML 程式碼。

  • providers:元件所需服務的依賴注入。

# template

# 模板就是那段 HTML 程式碼,可以用 templateUrl 引入外面的,也可以用 template`` 直接寫。

metadata

# 元資料裝飾器用類似的方式來指導 Angular 的行為。例如 @Input、@Output、@Injectable 等是一些最常用的裝飾器,用法就不在這裡展開了。

在圖中的意義:看圖中間那一塊,模板、元資料和元件共同描繪出這個視圖。

3.資料綁定 (data binding)

# 這裡一共展示四種資料綁定,看看範例程式碼:

//插值表达式 显示组件的hero.name属性的值
<li>{{hero.name}}</li>
//属性绑定 把父组件selectedHero的值传到子组件的hero属性中
<hero-detail [hero]="selectedHero"></hero-detail>
//事件绑定 用户点击英雄的名字时调用组件的selectHero方法
<li (click)="selectHero(hero)"></li>
//双向绑定 数据属性值通过属性绑定从组件流到输入框。用户的修改通过事件绑定流回组件,把属性值设置为最新的值
<input [(ngModel)]="hero.name">
登入後複製

可能大家对各种括号看的眼花了,总结一下:

  • 双花括号是单向绑定,传递的是值。方向是 组件 -> 模板。

  • 方括号是单向绑定,传递的是属性。方向是 父组件 -> 子组件。

  • 圆括号是事件绑定,处理点击等活动(action)。

  • 方括号套圆括号是双向绑定,方向是 组件 <-> 模板。

在图中的意义:看图中间那一块,数据绑定给模板和组件提供数据交互的方式。

4.指令 (directive)

严格来说组件就是一个指令,但是组件非常独特,并在 Angular 中位于中心地位,所以在架构概览中,我们把组件从指令中独立了出来。

我们这里提到的指令有两种类型:

结构型 structural 指令和属性 attribute 型指令。

放一下原文证明一下组件确实算是一个指令:

While a component is technically a directive, components are so distinctive and central to Angular applications that this architectural overview separates components from directives.

Two other kinds of directives exist: structural and attribute directives.

结构型指令是 ngFor、ngIf 这种的,通过在 DOM 中添加、移除和替换元素来修改布局。

属性型指令是 ngModel 这种的,用来修改一个现有元素的外观或行为。

Angular 还有少量指令,它们或者修改结构布局(例如 ngSwitch ), 或者修改 DOM 元素和组件的各个方面(例如 ngStyle 和 ngClass)。之后我会单独写一篇讲他们用法的文章。

在图中的意义:看图右上角那一块,组件是一个带模板的指令,只是扩展了一些面向模板的特性。

5.服务 (service)

官方文档的概念:

服务是一个广义范畴,包括:值、函数,或应用所需的特性。服务没有什么特别属于 Angular 的特性。Angular 对于服务也没有什么定义,它甚至都没有定义服务的基类,也没有地方注册一个服务。

这就像你在 iOS 或者 Android 里单独建了一个类叫 httpService ,封装了网络请求服务一样,不是具体的什么东西,就是一个概念了解下就行。

在图中的意义:看图左下角角那一块,服务是用来封装可重用的业务逻辑。

6.依赖注入 (dependency injection)

依赖注入是提供类的新实例的一种方式,还负责处理类所需的全部依赖。大多数依赖都是服务。 Angular 使用依赖注入来提供新组件以及组件所需的服务。

比如我们要给某组件导入 HomeService 这个服务,看这段代码:

constructor(private service: HeroService) { 
 ...
}
登入後複製

这个constructor就是构造函数,依赖注入在 constructor 中进行。你也许会觉得前面写上 private、public 之类的很怪,这是 TypeScript 语法比较特殊,习惯就好。

当 Angular 创建组件时,会首先为组件所需的服务请求一个注入器 injector。我们必须先用注入器 injector 为 HeroService 注册一个提供商 provider。

看一下下面的代码,意思就是我们必须在 providers 写上才能用

@Component({
 selector: 'hero-list',
 templateUrl: './hero-list.component.html',
 providers: [ HeroService ]
})
登入後複製

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

JS的递归实现方法

JS+canvas绘制饼状统计图

优化页面加载速度插件InstantClick

以上是Angular 4.0的架構使用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板