angular2是什么?我猜不容我贅述,各位一定略有耳聞,無(wú)論是曾經(jīng)AngularJS的擁躉,亦或是React的粉絲,都或多或少的對(duì)她有過(guò)一點(diǎn)了解。未見(jiàn)其物、先聞其聲,angular2在問(wèn)世之前已經(jīng)做足了宣傳,想必諸位也一定被下面各種詞匯所震懾,什么:TypeScript、 ES5、 ES6、 Dart、 Immutable、 Unidirectional Data Flow、 Reactive Programming、 Decorators、 System.js、 webpack...,天花亂墜,美不勝收!但我們不禁要問(wèn),“都說(shuō)AngularJS學(xué)習(xí)曲線陡峭,也沒(méi)陡出這些個(gè)莫名詞匯!”,angular2究竟該如何上手?看了這些個(gè)知識(shí)點(diǎn),有木有嚇得手抖,都搞不清從何處入手了!?
本教程主旨:多些操作、少點(diǎn)說(shuō)教(理論是進(jìn)階必須的,千萬(wàn)不要誤讀),讓我們從實(shí)踐中追尋真理吧!
本章源碼:environment
本章使用angular2版本為:2.4.5, webpack版本為: 2.2.0
推薦開(kāi)發(fā)工具 vscode這里我推薦使用vscode(原諒我變了,之前推薦的是atom)。很爽的哦!
創(chuàng)建項(xiàng)目mkdir environment cd environment npm init
根據(jù)npm init提問(wèn),創(chuàng)建package.json文件,創(chuàng)建后去掉不必要的字段,像這樣即可:
{ "name": "environment", "version": "1.0.0", "description": "I will show you how to set up angular2 development environment", "keywords": [ "angular2", "environment" ], "scripts": { "start": "webpack-dev-server --hot--host 0.0.0.0" }, "author": "Howard.Zuo", "license": "MIT", "dependencies": { "@angular/common": "^2.4.5", "@angular/compiler": "^2.4.5", "@angular/core": "^2.4.5", "@angular/platform-browser": "^2.4.5", "@angular/platform-browser-dynamic": "^2.4.5", "@angular/forms": "^2.4.5", "core-js": "^2.4.1", "rxjs": "5.0.3", "zone.js": "^0.7.6" }, "devDependencies": { "@types/core-js": "^0.9.35", "ts-loader": "^2.0.0", "typescript": "^2.1.5", "webpack": "^2.2.0", "webpack-dev-server": "^2.2.0" } }安裝依賴
npm install
@angular: 這個(gè)必須的,沒(méi)意見(jiàn)吧?之所以分了多個(gè)包,這是最新2.1.2的變化,可以按需引入,增加靈活性
core-js: javascript的一個(gè)標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn),包含了大量ES2015, ES2016的ES5實(shí)現(xiàn)
rxjs: 一個(gè)Reactive Programming的JavaScript實(shí)現(xiàn)。這里對(duì)她的依賴是因?yàn)?b>angular2支持多種數(shù)據(jù)更新模式,比如:flux、Rx.js
zone.js: 用來(lái)對(duì)異步任務(wù)提供Hooks支持,使得在異步任務(wù)運(yùn)行之前/之后做額外操作成為可能。在angular2里的主要應(yīng)用場(chǎng)景是提高臟檢查效率、降低性能損耗。
webpack: 我們這里使用webpack2對(duì)源碼進(jìn)行編譯、打包,而不是用官網(wǎng)介紹的System.js的運(yùn)行時(shí)加載、解釋、執(zhí)行。合并打包的好處不用我多說(shuō)吧?減少請(qǐng)求數(shù)、uglify、預(yù)檢查...
webpack-dev-server: 一個(gè)輕量級(jí)的,支持webpack編譯的靜態(tài)服務(wù)器(調(diào)試工具),本章節(jié)我們就用它啟動(dòng)程序
ts-loader: TypeStrong出品的TypeScript加載器,通過(guò)該加載器,TypeScript源碼可以順利被編譯成ES5代碼
typescript: angular2官方推薦的開(kāi)發(fā)語(yǔ)言,我們?cè)诮坛汤镆矊⑹褂迷撜Z(yǔ)言進(jìn)行代碼編寫(xiě)
@types/core-js: 自typescript 2.0.0以后,使用@types管理聲明文件,由于angular2依賴ES2015的諸多特性,譬如:Promise、Map等,所以需要引入這些API的聲明
第一個(gè)示例 創(chuàng)建index.htmltouch index.html
向剛才創(chuàng)建的index.html里添加如下內(nèi)容:
創(chuàng)建app.tsenvironment
mkdir ts touch ts/app.ts
向剛才創(chuàng)建的ts/app.ts里添加如下內(nèi)容:
import {Component} from "@angular/core"; //聲明第一個(gè)Component @Component({ selector: "my-app", template: "創(chuàng)建index.tsMy First Angular 2 App
" }) export class AppComponent { }
touch ts/index.ts
向剛才創(chuàng)建的ts/index.ts里添加如下內(nèi)容:
//不顯示引入,你會(huì)得到"Uncaught reflect-metadata shim is required when using class decorators"的錯(cuò)誤 import "core-js/es6"; import "core-js/es7/reflect"; import "zone.js/dist/zone"; //引入NgModule裝飾器 import { NgModule } from "@angular/core"; //引入瀏覽器模塊 import { BrowserModule } from "@angular/platform-browser"; //引入啟動(dòng)器 import { platformBrowserDynamic } from "@angular/platform-browser-dynamic"; //引入我們剛才創(chuàng)建的第一個(gè)component import { AppComponent } from "./app"; //聲明一個(gè)應(yīng)用模塊 @NgModule({ imports: [ BrowserModule ], declarations: [ AppComponent ], bootstrap: [ AppComponent ] }) class AppModule { } //啟動(dòng)應(yīng)用 platformBrowserDynamic().bootstrapModule(AppModule);創(chuàng)建webpack.config.js
touch webpack.config.js
向剛才創(chuàng)建的webpack.config.js里添加如下內(nèi)容:
const {resolve} = require("path"); module.exports = { entry: { index: "./ts/index.ts" }, output: { path: resolve(__dirname, "dist"), filename: "bundle.js", publicPath: "dist/" }, module: { exprContextCritical: false, rules: [ { test: /.ts$/, use: ["ts-loader"] } ] }, resolve: { extensions: [ ".js", ".ts" ] } };創(chuàng)建tsconfig.json
touch tsconfig.json
向剛才創(chuàng)建的tsconfig.json里添加如下內(nèi)容:
{ "compilerOptions": { "module": "commonjs", "target": "es5", "moduleResolution": "node", "noImplicitAny": true, "removeComments": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "sourceMap": true, "declaration": false }, "buildOnSave": false, "compileOnSave": false, "exclude": [ "node_modules" ] }運(yùn)行
好了,到目前為止,我們第一個(gè)示例的開(kāi)發(fā)/運(yùn)行環(huán)境就基本搭好了,現(xiàn)在啟動(dòng)試試看:
npm start
你會(huì)看到:
下回預(yù)告:牛刀小試component
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/79186.html
摘要:通過(guò)增加刪除元素改變布局的。譬如和控制元素顯示隱藏,或者改變?cè)匦袨榈摹F┤缭O(shè)計(jì)看過(guò)我之前介紹以手寫(xiě)依賴注入的朋友應(yīng)該已經(jīng)對(duì)行為驅(qū)動(dòng)多少有些了解了。她有,并且包含了至少一個(gè)和一個(gè)標(biāo)簽。,將左邊的事件傳遞給了右邊的表達(dá)式通常就是事件處理函數(shù)。 前集回顧 在上一章里我們講了如何為angular2搭建開(kāi)發(fā)環(huán)境(還沒(méi)搭起來(lái)的趕緊去看哦),并使之跑起來(lái)我們的第一個(gè)My First Angular...
摘要:前集回顧上一章里我們?cè)诶锿ㄟ^(guò)組合三個(gè)組件,并通過(guò)單向數(shù)據(jù)流的方式把她們驅(qū)動(dòng)起來(lái)。設(shè)計(jì)每章都會(huì)提一下,先設(shè)計(jì)使用場(chǎng)景這種方式,我們稱之為,不了解的朋友參考以手寫(xiě)依賴注入。 前集回顧 上一章里我們?cè)贏ppComponent里通過(guò)組合InputItem、 CheckableItem、 Counter三個(gè)組件,并通過(guò)Unidirectional Data Flow(單向數(shù)據(jù)流)的方式把她們驅(qū)動(dòng)...
摘要:我們使用了模式書(shū)寫(xiě),并引入了思想,這些以前只在里見(jiàn)到的設(shè)計(jì),現(xiàn)在里也有體現(xiàn),并且在本章中會(huì)著重講解多的協(xié)作。如果之前寫(xiě)過(guò),那對(duì)于這種書(shū)寫(xiě)方式一定無(wú)比熟悉。每次數(shù)據(jù)的變更,無(wú)論是還是,都將變化冒泡到,然后由再向下逐級(jí)推送各組件是否重繪。 前集回顧 在上一章里我們講了如何在angular2下開(kāi)發(fā)一個(gè)component(還沒(méi)做的趕緊去學(xué)吧)。我們使用了Unidirectional Data ...
摘要:入門(mén)系列一如何在中使用和基于的插件在年的月中旬,官方終于正式發(fā)布。本篇文章就簡(jiǎn)單介紹下在中如何使用極其插件。按照插件的使用規(guī)則,在對(duì)應(yīng)的中使用插件所需要的結(jié)構(gòu)。 Angular2入門(mén)系列(一)————如何在Angular2中使用jQuery和基于jQuery的插件 在2016年的9月中旬,Google官方終于正式發(fā)布Angular2。盡管npm社區(qū)越來(lái)越完善,也提供了大量的插件,但是基...
閱讀 836·2021-09-07 09:58
閱讀 2693·2021-08-31 09:42
閱讀 2867·2019-08-30 14:18
閱讀 3094·2019-08-30 14:08
閱讀 1840·2019-08-30 12:57
閱讀 2765·2019-08-26 13:31
閱讀 1306·2019-08-26 11:58
閱讀 1060·2019-08-23 18:06