日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Angular2入门教程-1

發(fā)布時(shí)間:2025/7/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Angular2入门教程-1 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

?

Angular2入門(mén)教程-1

?

今天,Angular2終于正式發(fā)布了2.0.0的正式版,所以已經(jīng)可以開(kāi)始正式使用了。

Angular2介紹

首先,Angular2跟Angular1.x版本沒(méi)有多大關(guān)系,雖然2沿用了版本1的一些概念,像directive, model, service, router, dependency injection等, 但是很多用法和原理都已經(jīng)不是那么一回事了。Angular2有如下一些特性:

模塊化

  • 在Angular2開(kāi)發(fā)中,所有的系統(tǒng)功能都是模塊化的,你只需要導(dǎo)入需要的部分。用Angular2開(kāi)發(fā)的應(yīng)用也是模塊化的,一個(gè)模塊、一個(gè)功能、甚至頁(yè)面上的一個(gè)標(biāo)簽都是組件。
  • 模塊化帶來(lái)的最大的好處就是按需加載,這就大大提高了APP的啟動(dòng)時(shí)的性能,也使得需要下載的代碼比較小,因?yàn)椴恍枰哪K可以不用導(dǎo)入。按照Angular官方的說(shuō)法,使用Angular2的hello world的實(shí)例創(chuàng)建的App,在做完代碼壓縮合并以后,下載的代碼在50K以?xún)?nèi)。
  • 模塊化也給開(kāi)發(fā)帶來(lái)方便,使得協(xié)作開(kāi)發(fā)、代碼合并等都非常方便。

使用TypeScript

  • TypeScript是Javascript的超集,TypeScript的代碼會(huì)被編譯成Javascript的代碼再執(zhí)行。所以,如果有任何的語(yǔ)法或其他錯(cuò)誤,就可以在編譯的時(shí)候及時(shí)發(fā)現(xiàn)。而這個(gè)編譯的過(guò)程可以通過(guò)工具自動(dòng)執(zhí)行,這樣就可以在你寫(xiě)完某一段代碼的時(shí)候就發(fā)現(xiàn)其中的錯(cuò)誤。
  • TypeScript的靜態(tài)類(lèi)型的,所以,我們就可以通過(guò)一些工具來(lái)實(shí)現(xiàn)像JAVA這樣的強(qiáng)類(lèi)型語(yǔ)言才會(huì)有自動(dòng)補(bǔ)全、重構(gòu)、代碼查找等功能。雖然說(shuō)像Webstorm這樣的工具對(duì)于javascript也能提供自動(dòng)代碼補(bǔ)全之類(lèi)的功能,但是他是通過(guò)檢索代碼里面的所有關(guān)鍵字,然后匹配關(guān)鍵字去補(bǔ)全,而不是通過(guò)語(yǔ)言自身的特性。
  • TypeScript具有面向?qū)ο笳Z(yǔ)言的一些特性,如抽象和繼承、命名空間、包等。以抽象和繼承為例,雖然用js也可以實(shí)現(xiàn)類(lèi)和類(lèi)的繼承關(guān)系,但是使用TypeScript我們可以直接使用interface,?implements這樣的語(yǔ)法來(lái)實(shí)現(xiàn),這使得代碼結(jié)構(gòu)更清晰、更易讀。

更容易

  • 好吧,這只是官方的說(shuō)法,要說(shuō)容易也要看從什么方面來(lái)說(shuō)。如果學(xué)過(guò)Angular1,你們可能知道,1非常容易上手,有一點(diǎn)js基礎(chǔ)的人,幾天就能學(xué)會(huì)并開(kāi)始開(kāi)發(fā)。如果再有一點(diǎn)MVC的背景或知識(shí),就更容易了。但是2就不一樣,一開(kāi)始學(xué)習(xí)成本比較高,首先是因?yàn)門(mén)ypeScript的語(yǔ)法,模塊化的開(kāi)發(fā),對(duì)于沒(méi)有多少開(kāi)發(fā)經(jīng)驗(yàn)的人來(lái)說(shuō),理解和上手都有一定困難。但是一旦上手以后,之后的開(kāi)發(fā)和學(xué)習(xí)就比較容易了。不像Angular1,一開(kāi)始的學(xué)習(xí)曲線很平緩,很容易上手,但是真正開(kāi)始開(kāi)發(fā)一個(gè)比較復(fù)雜的應(yīng)用的時(shí)候,就會(huì)發(fā)現(xiàn)有很多問(wèn)題,需要理解他的背后的原理,像雙向綁定、模板、路由等。這時(shí)候的學(xué)習(xí)曲線就會(huì)變得很陡。
  • Angular2是一個(gè)完整的前端開(kāi)發(fā)框架,利用Angular2提供的功能和模塊,你可以開(kāi)發(fā)一個(gè)完整的應(yīng)用。但是如果你用React,你還需要整合很多其他的庫(kù)來(lái)實(shí)現(xiàn)某些方面的功能,這樣就會(huì)面臨很多選擇,Redux, Flux, React-router, axios…
  • 前面提到Angular2使用TypeScript,這也給開(kāi)發(fā)帶來(lái)很多便利,使得代碼更易讀、容易維護(hù)。

Angular2開(kāi)發(fā)

在這篇文章里,我們通過(guò)一個(gè)完整的實(shí)例(一個(gè)Todolist的App),來(lái)了解一個(gè)Angular2的應(yīng)用的開(kāi)發(fā)的大致的方法或過(guò)程。這會(huì)分成2部分,第一部分先介紹我們使用的Angular2項(xiàng)目的模板,通過(guò)這個(gè)模板介紹Angular2項(xiàng)目的基本框架和配置。在第二部分里,再具體的開(kāi)發(fā)具體的業(yè)務(wù)模塊。

獲取項(xiàng)目模板

我創(chuàng)建了一個(gè)Angular2的項(xiàng)目模板,這是根據(jù)官方提供的教程創(chuàng)建,已經(jīng)配置好項(xiàng)目的基本配置和typescript,還提供了live-reload的功能,也就是當(dāng)某一個(gè)文件修改的時(shí)候,就會(huì)刷新頁(yè)面,如果修改的文件是typescript的.ts文件,就會(huì)先編譯再刷新頁(yè)面。使用git將項(xiàng)目clone到你的指定目錄中就可以開(kāi)始使用了:

?

1

?

git clone --depth 1 https://github.com/Mavlarn/angular2-basic

?

然后進(jìn)入項(xiàng)目目錄里面,安裝依賴(lài)包:

?

1

2

?

cd angular2-basic

npm install

?

npm install?除了安裝項(xiàng)目的依賴(lài)包,最后還會(huì)運(yùn)行typings install,如果你運(yùn)行完npm install發(fā)現(xiàn)’typings’目錄沒(méi)有創(chuàng)建,就需要運(yùn)行這個(gè)命令去手動(dòng)安裝:

?

1

?

npm run typings -- install

?

然后就可以運(yùn)行了:

?

1

?

npm start

?

啟動(dòng)成功以后,就會(huì)自動(dòng)打開(kāi)瀏覽器并打開(kāi)url:http://localhost:3000/?,應(yīng)該看到下面的頁(yè)面:

項(xiàng)目結(jié)構(gòu)和文件

先來(lái)看看項(xiàng)目模板里面的文件,以及他們都是做什么的:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

?

.

├── app

│?? ├── about

│?? │?? ├── about.component.html

│?? │?? ├── about.component.ts

│?? │?? └── about.routes.ts

│?? ├── example

│?? │?? ├── example.component.html

│?? │?? ├── example.component.ts

│?? │?? └── example.routes.ts

│?? ├── app.component.css

│?? ├── app.component.html

│?? ├── app.component.ts

│?? ├── app.module.ts

│?? ├── app.routes.ts

│?? └── main.ts

├── build

├── index.html

├── package.json

├── styles.css

├── systemjs.config.js

├── tsconfig.json

├── typings

│?? ├── globals

│?? └── index.d.ts

└── typings.json

?

下面是項(xiàng)目環(huán)境相關(guān)的文件:

package.json

這是項(xiàng)目的基本定義文件,所有的基于nodejs的項(xiàng)目都會(huì)有一個(gè)package.json文件,里面會(huì)定義項(xiàng)目名稱(chēng)、版本、依賴(lài)的庫(kù),以及腳本。腳本里面定義了幾個(gè)可以使用npm運(yùn)行的腳本,例如:

  • “start”: “tsc && concurrently \”npm run tsc:w\” \”npm run lite\” “
    用于啟動(dòng)測(cè)試服務(wù)器,啟動(dòng)的過(guò)程中執(zhí)行了編譯、檢測(cè)文件修改、啟動(dòng)服務(wù)器等任務(wù)。
  • “postinstall”: “typings install”
    用于在npm install完成以后執(zhí)行,下載TypeScript類(lèi)型定義文件。
  • “tsc:w”: “tsc -w”
    編譯TypeScript文件,并且是以’watch’模式啟動(dòng),也就是檢測(cè)文件修改,如果有TypeScript文件被修改,自動(dòng)執(zhí)行編譯過(guò)程。

typings.json

TypeScript類(lèi)型定義文件,定義了項(xiàng)目用到的TypeScript類(lèi),用于編譯、代碼補(bǔ)全等。

typings文件夾

運(yùn)行typings install以后,TypeScript會(huì)根據(jù)typings.json文件里面的定義,下載需要的類(lèi)型定義文件,下載的TypeScript類(lèi)文件會(huì)保存在這里。

tsconfig.json

TypeScript的配置文件,在編譯TypeScript文件的時(shí)候,會(huì)根據(jù)這個(gè)配置進(jìn)行編譯。

systemjs.config.js

SystemJS的配置文件。Angular2使用SystemJS來(lái)實(shí)現(xiàn)動(dòng)態(tài)加載,它設(shè)置每個(gè)模塊所在的位置,例如,我們的app,是從build目錄中加載,加載的文件是main.js。還有,angular模塊,也就是@angular,是從node_modules/@angular里加載。如果我們的App以后要使用其他第三方的庫(kù),就需要在這里添加,才能夠成功加載。

下面,我們?cè)賮?lái)看看App相關(guān)的文件。

index.html

App的index文件,里面已經(jīng)添加了需要的js、css文件,然后通過(guò)SystemJS加載app。該文件里面的:

?

1

?

<root-app>Loading...</root-app>

?

定義了加載App的html組件’root-app’。

styles.css

全局的樣式定義。注意每個(gè)組件使用的樣式不是在這里面。

app/main.ts

Angular2的App初始化文件。每一個(gè)Angular2的App都是通過(guò)這個(gè)文件被加載的。

?

1

2

3

4

?

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';

import { AppModule } from './app.module';

platformBrowserDynamic().bootstrapModule(AppModule);

?

它首先從@angular/platform-browser-dynamic里引入了platformBrowserDynamic,從他的名字可以看出,它根據(jù)當(dāng)前的運(yùn)行環(huán)境,如操作系統(tǒng)、瀏覽器,來(lái)初始化一個(gè)運(yùn)行環(huán)境,然后從這個(gè)環(huán)境里面運(yùn)行AppModule。

app/app.module.ts

這個(gè)文件定義了我們的App,它是一個(gè)Angular模塊。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

?

import { NgModule } from '@angular/core';

import { BrowserModule } from '@angular/platform-browser';

import { RouterModule } from '@angular/router';

import { FormsModule } from '@angular/forms';

import { AppComponent } from './app.component';

import { AboutComponent } from './about/about.component';

import { ExampleComponent } from './example/example.component';

import { routes } from './app.routes';

@NgModule({

imports: [BrowserModule, FormsModule, RouterModule.forRoot(routes)],

declarations: [AppComponent, AboutComponent, ExampleComponent],

bootstrap: [AppComponent]

})

export class AppModule {}

?

首先它引入了幾個(gè)Angular2的模塊,我們需要使用RouterModule里面定義的路由,如果有表單,需要引入FormsModule。
接下來(lái)的幾個(gè),就是引入了這個(gè)模板項(xiàng)目里面提供的幾個(gè)組件,其中AppComponent是App的主加載模塊,?AboutComponent和ExampleComponent組件是兩個(gè)提供的實(shí)例。routes是定義的路由。

接下來(lái)再看App模塊的定義:

?

1

2

3

4

5

6

?

@NgModule({

imports: [BrowserModule, FormsModule, RouterModule.forRoot(routes)],

declarations: [AppComponent, AboutComponent, ExampleComponent],

bootstrap: [AppComponent]

})

export class AppModule {}

?

它使用NgModule標(biāo)簽定義了一個(gè)模塊,我們需要導(dǎo)入的模塊和路由、定義的組件,啟動(dòng)app使用的組件,都在這里面定義。

  • app/app.routes.ts
    這個(gè)是app的路由定義。
    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    ?

    import { Routes } from '@angular/router';

    import { AboutRoutes } from './about/about.routes';

    import { ExampleRoutes } from './example/example.routes';

    export const routes: Routes = [

    {

    path: '',

    redirectTo: '/example',

    pathMatch: 'full'

    },

    ...AboutRoutes,

    ...ExampleRoutes

    ];

他首先從@angular/router里面引入Routes類(lèi),并根據(jù)這個(gè)定義app的路由。在這個(gè)路由里面,我們定義了一個(gè)默認(rèn)路由,當(dāng)你的path為空時(shí)重定向到’example’:

?

1

?

{ path: '', redirectTo: '/example', pathMatch: 'full'}

?

也就是當(dāng)打開(kāi)urlhttp://localhost:3000的時(shí)候,自動(dòng)重定向到’example’,也就是http://localhost:3000/example。

同時(shí),它還從兩個(gè)實(shí)例的組件about和example里面引入他的路由定義文件,并把它們合并到app的路由定義數(shù)組里面。

注意這里的...語(yǔ)法,這是列表的合并的語(yǔ)法,意思是,我在定義一個(gè)Routes的數(shù)組的同時(shí),把AboutRoutes這個(gè)數(shù)組也合并到當(dāng)前的數(shù)組里面。

app/app.component.*

在上面的AppModule的定義里,我們定義了我們的app,并且定義了AppComponent是加載模塊。下面就來(lái)看看這個(gè)組件是怎么定義的。這里有3個(gè)文件,分別為’ts’, ‘css’和’html’,這也是一般一個(gè)簡(jiǎn)單的組件包含的3個(gè)部分。其中app.component.ts是組件定義的類(lèi):

?

1

2

3

4

5

6

7

8

?

import { Component } from '@angular/core';

@Component({

selector: 'root-app',

templateUrl: 'app/app.component.html',

styleUrls: ['app/app.component.css']

})

export class AppComponent {}

?

這里,我們使用一個(gè)Component標(biāo)簽來(lái)定義一個(gè)組件,里面有3個(gè)屬性:

  • selector,就是這個(gè)組件在它的上一級(jí)html頁(yè)面里面要填充進(jìn)那個(gè)element里。由于這個(gè)是我們的APP的主模塊,它的上一級(jí)html頁(yè)面也就是index.html。在上面的index頁(yè)面中,提到<root-app>Loading...</root-app>,這個(gè)’root-app’就是’selector’里面的這個(gè)值。當(dāng)這個(gè)AppComponent加載成功以后,這個(gè)組件的html內(nèi)容就會(huì)替換index頁(yè)面的<root-app>。
  • templateUrl
    這個(gè)屬性設(shè)置了這個(gè)組件使用的html模板。對(duì)于簡(jiǎn)單的頁(yè)面的話,也可以使用template來(lái)定義一個(gè)html的字符串作為模板。下面是這個(gè)模板的內(nèi)容:
    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    ?

    <header>

    <section>

    <h2>First Angular 2 App</h2>

    <p>Greate! My first angular 2 app works!</p>

    </section>

    <nav>

    <ul>

    <li><a routerLink='/about'>About</a></li>

    <li><a routerLink='/example'>Example</a></li>

    </ul>

    </nav>

    </header>

    <router-outlet></router-outlet>

上面的頁(yè)面其實(shí)就是我們的app里面的主頁(yè)面,上面header的部分就是app的頭,有2個(gè)導(dǎo)航的鏈接,分別鏈接到模板里面提供的2個(gè)實(shí)例組件(注意鏈接用的是routerLink='/about'的方式,而不是’html’的’href’的方式。)。下面就是router-outlet定義的一個(gè)空的element,Angular2會(huì)根據(jù)路由定義將當(dāng)前路徑所對(duì)應(yīng)的頁(yè)面內(nèi)容放在這個(gè)element下面。

  • styleUrls
    顧名思義,這個(gè)就是樣式的定義文件的路徑。同樣,我們也可以使用style來(lái)在這個(gè)文件內(nèi)定義樣式。我們多次提到Angular2是組件化的,組件之間應(yīng)該是不會(huì)相互影響,首先就是定義的樣式不會(huì)相互影響。在這個(gè)app.component.css文件中,我們定義了app.component.html需要的樣式:
    ?

    1

    2

    3

    4

    5

    6

    7

    8

    ?

    header section {

    display: inline-block;

    width: 80%;

    }

    header nav {

    width: 20%;

    float: right;

    }

我們不需要擔(dān)心在整個(gè)app的其他組件里面,也會(huì)有其他的html element會(huì)被header section這樣的樣式影響,這個(gè)樣式只會(huì)在這個(gè)組件內(nèi)有效。

app/example/?和 app/about/

這是一個(gè)實(shí)例組件,里面有ts, html, css。這幾個(gè)文件的功能和說(shuō)明跟上面’app.component’里的定義類(lèi)似。有一點(diǎn)區(qū)別的就是example.routes.ts文件:

?

1

2

3

4

5

6

7

8

9

?

import { Route } from '@angular/router';

import { ExampleComponent } from './example.component';

export const ExampleRoutes: Route[] = [

{

path: 'example',

component: ExampleComponent

}

];

?

這個(gè)路由定義引入的是Route, 而不是之前的Routes,區(qū)別是我們?cè)赼pp模塊的路由定義里面合并每個(gè)模塊的路由定義。

到現(xiàn)在為止,我們介紹了一個(gè)Angular2的項(xiàng)目所包含的配置和代碼,了解了上面介紹的項(xiàng)目環(huán)境以后,就可以再進(jìn)一步使用gulp或者webpack來(lái)創(chuàng)建項(xiàng)目構(gòu)建的環(huán)境。如不同的運(yùn)行環(huán)境下的自動(dòng)配置,如開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境和生產(chǎn)環(huán)境。還有代碼的混淆、壓縮、合并等,都可以通過(guò)添加一個(gè)任務(wù)來(lái)完成。

熟悉了上面的代碼以后,我們就可以來(lái)實(shí)現(xiàn)自己的業(yè)務(wù)邏輯,也就是添加一些組件,把這些組件加到AppModule里,使用第三方的jsku等。在這個(gè)教程的第二部分里,我們會(huì)介紹怎么開(kāi)發(fā)新的組件,來(lái)完成一個(gè)App。

?

?

轉(zhuǎn)載于:https://my.oschina.net/martin123/blog/776673

總結(jié)

以上是生活随笔為你收集整理的Angular2入门教程-1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。