成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Angular4的QuickStart—— ES6 而非TypeScript

jkyin / 2292人閱讀

摘要:今年月份,官方發(fā)布了新版,新版本的特性已經(jīng)有很多文章了,在此不一一贅述。組件是系統(tǒng)中最重要的基本構(gòu)造塊之一。但是由于目前不支持裝飾器語(yǔ)法,因此通過(guò)方法完成這一工作。本文主要是提供一個(gè)基于的,如有問(wèn)題,歡迎留言探討。

原文發(fā)表于本人的個(gè)人博客,地址:Angular4的QuickStart——With ES6 Not TypeScript,歡迎反饋探討。

今年3月份,Angular官方發(fā)布了新版——Angular4.0.0,新版本的特性已經(jīng)有很多文章了,在此不一一贅述。

但從Angular2.x以來(lái),JavaScript版本的官方文檔就從未完整過(guò),而ES6的QuickStart也從未在日程之內(nèi),這對(duì)初學(xué)者而言多少有點(diǎn)不太友好。雖然網(wǎng)上有ES6+Angular2.x的QuickStart,但是多少有點(diǎn)問(wèn)題,而且跟Angular4有些不一樣,也過(guò)時(shí)了。今天為了折騰Angular4到處找文檔查資料,搞了好久才搞定一個(gè)“hello world”,實(shí)在有些不爽,為了幫助像我一樣的初學(xué)者,我覺(jué)得把這個(gè)ES6的QuickStart寫(xiě)出來(lái)也許會(huì)有點(diǎn)用。

NOTE:本文實(shí)現(xiàn)的內(nèi)容與官方文檔中的QuickStart實(shí)現(xiàn)的內(nèi)容沒(méi)有區(qū)別,只是本文是用ES6實(shí)現(xiàn)的,而非JavaScript或TypeScript.

廢話少說(shuō),show the code.

首先是開(kāi)發(fā)環(huán)境,先上package.json:

//package.json
{
  "name": "angular4-quickstart-es6-webpack",
  "version": "1.0.0",
  "description": "The Angular 4 Quickstart tutorial done in ES6 with webpack and Babel, without using TypeScript.",
  "scripts": {
    "start": "npm run lite",
    "lite": "lite-server",
    "webpack": "webpack --progress",
    "postinstall": "npm run webpack"
  },
  "repository": {
    "type": "git",
    "url": ""
  },
  "author": "",
  "license": "ISC",
  "bugs": {
    "url": ""
  },
  "homepage": "",
  "dependencies": {
    "@angular/common": "^4.0.0",
    "@angular/compiler": "^4.0.0",
    "@angular/core": "^4.0.0",
    "@angular/forms": "^4.0.0",
    "@angular/http": "^4.0.0",
    "@angular/platform-browser": "^4.0.0",
    "@angular/platform-browser-dynamic": "^4.0.0",
    "@angular/router": "^4.0.0",
    "core-js": "^2.4.1",
    "rxjs": "^5.1.0",
    "zone.js": "^0.8.4",
    "es6-promise": "^3.0.2",
    "es6-shim": "^0.35.0",
    "reflect-metadata": "0.1.2"
  },
  "devDependencies": {
    "babel-core": "^6.7.0",
    "babel-loader": "^6.2.4",
    "babel-preset-es2015": "^6.6.0",
    "concurrently": "^2.0.0",
    "lite-server": "^2.1.0",
    "script-loader": "^0.6.1",
    "webpack": "^1.12.14"
  }
}

除了Angular官方文檔中列出的包和工具之外,還包括了ES6的相關(guān)模塊及其轉(zhuǎn)碼工具Babel。package.json配置好了之后就可以開(kāi)始配置開(kāi)發(fā)環(huán)境了,

目錄結(jié)構(gòu):

開(kāi)發(fā)環(huán)境:

開(kāi)發(fā)環(huán)境的配置需要安裝Node(官網(wǎng)),然后安裝webpack,

npm install webpack -g

然后在nges6目錄下執(zhí)行:

npm install

或者執(zhí)行:

cnpm install

安裝時(shí)間可能會(huì)有點(diǎn)長(zhǎng),耐心等待,安裝完成后,開(kāi)發(fā)所需要的包就會(huì)被下載到node_modules文件夾中,接下來(lái)是webpack的配置文件:

//webpack.config.js
var path = require("path");
module.exports = {
    entry: path.join(__dirname, "public", "src","index.js"),
    output: {
        path: path.join(__dirname, "public", "dist"),
        filename: "vendor.js"
    },
    devtool: "source-map",
    module: {
        loaders: [
            {
                test: /.js$/,
                loader: "babel-loader",
                query: {
                    presets: ["es2015"]
                }
            },
        ]
    }
}

配置文件中我們定義了入口文件(public/src/index.js),然后定義了輸出路徑和輸出文件的命名(public/dist/vendor.js),webpack將把我們需要的全部依賴打包到一個(gè)文件中(vendor.js),這樣我們?cè)贖TML中只要用一個(gè)script標(biāo)簽引入這個(gè)文件就可以了(暫不考慮懶加載的問(wèn)題)。

不知道上面這部分在說(shuō)什么的同學(xué),請(qǐng)先以“nodejs”、“npm”、“webpack”等關(guān)鍵詞搜索網(wǎng)上的資料。

組件

Angular從2.0開(kāi)始組件化,關(guān)于組件,中文文檔中介紹說(shuō):“組件是一個(gè) Angular 類(lèi),用于把數(shù)據(jù)展示到視圖 (view),并處理幾乎所有的視圖顯示和交互邏輯。組件是 Angular 系統(tǒng)中最重要的基本構(gòu)造塊之一?!苯M件是一個(gè)應(yīng)用的基礎(chǔ)構(gòu)成,所以,我們首先在app.component.js中定義一個(gè)“組件”:

//app.component.js
import {Component} from "@angular/core";

class AppComponent {
    static get annotations() {
        return [
            new Component({
                selector: "my-app",
                template: "

My First Angular 2 App

" }), ]; } constructor () {} } export {AppComponent};

在組件的定義中,需要用裝飾器(Decorator)將組件的元數(shù)據(jù)附加到類(lèi)上,然后Angular根據(jù)這些元數(shù)據(jù)創(chuàng)建一個(gè)組件實(shí)例。但是由于ES6目前不支持裝飾器語(yǔ)法,因此通過(guò)static get annotations()方法完成這一工作。

模塊:

Angular是以模塊的形式來(lái)組織代碼,每個(gè)Angular應(yīng)用都至少有一個(gè)根模塊(Root Module),所以接下來(lái)是app.module.js:

//app.module.js
import {BrowserModule} from "@angular/platform-browser";
import {NgModule} from "@angular/core";
import {AppComponent} from "./app.component";

class AppModule{
    static get annotations() {
        return [
            new NgModule({
                imports: [ BrowserModule ],
                declarations: [ AppComponent ],
                  bootstrap: [ AppComponent ]
            })
        ];
    }
}

export {AppModule};

首先用ES6中的import關(guān)鍵字導(dǎo)入依賴的包(platform-browser/core)以及我們編寫(xiě)的組件(app.component),然后用class關(guān)鍵字聲明我們的根模塊(AppModule)。關(guān)于impors、declarations、bootstrap的含義,請(qǐng)查閱官方文檔中關(guān)于根模塊的部分官方文檔鏈接

啟動(dòng)引導(dǎo):

在main.js中啟動(dòng)(bootstrap)根模塊,這個(gè)引導(dǎo)文件基本上只寫(xiě)這一次就OK了:

//main.js
import {platformBrowserDynamic} from "@angular/platform-browser-dynamic";
import {AppModule} from "./app.module";

let boot = document.addEventListener("DOMContentLoaded", () => {
    platformBrowserDynamic().bootstrapModule(AppModule);
});

module.exports = boot;

index.js

index.js用于告訴webpack需要打包的依賴都有哪些。

//index.js
require("!!script!../../node_modules/es6-shim/es6-shim.min.js");
require("!!script!../../node_modules/core-js/client/shim.min.js");
require("!!script!../../node_modules/zone.js/dist/zone.js");
require("!!script!../../node_modules/rxjs/bundles/Rx.min.js");
require("!!script!../../node_modules/@angular/core/bundles/core.umd.js");
require("!!script!../../node_modules/@angular/common/bundles/common.umd.js");
require("!!script!../../node_modules/@angular/compiler/bundles/compiler.umd.js");
require("!!script!../../node_modules/@angular/platform-browser/bundles/platform-browser.umd.js");
require("!!script!../../node_modules/@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js");


require("./app/main");

index.html

最后是index.html文件:




    Angular 4 QuickStart
    



    Loading...

    


代碼寫(xiě)好了,接下來(lái)是兩個(gè)命令:

webpack --progress
npm start

這兩個(gè)命令會(huì)將所有需要的js模塊打包到vendor.js中,并啟動(dòng)一個(gè)本地服務(wù)器,調(diào)用你的瀏覽器,你會(huì)看到你的應(yīng)用跑起來(lái)了:

由于本人也是入門(mén)級(jí)選手,很多東西也沒(méi)搞清楚,所以文章寫(xiě)得很簡(jiǎn)單。但是其中的諸多概念都有不少文章有所論述,可以在網(wǎng)上查到,我也不可能說(shuō)得更明白,所以就不拾人牙慧了,更深入的內(nèi)容留待以后探討。本文主要是提供一個(gè)基于webpack+ES6的QuickStart,如有問(wèn)題,歡迎留言探討。

如需轉(zhuǎn)載,請(qǐng)注明原文鏈接。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/87043.html

相關(guān)文章

  • Angular2 VS Angular4 深度對(duì)比:特性、性能

    摘要:的特性和性能是的超集,用于幫助的開(kāi)發(fā)。注解提供了連接元數(shù)據(jù)和功能的工具。通過(guò)在庫(kù)中提供基本信息可以調(diào)用函數(shù)或創(chuàng)建類(lèi)的實(shí)例來(lái)檢查相關(guān)元數(shù)據(jù),從而簡(jiǎn)化了對(duì)象實(shí)例的構(gòu)建。停用它會(huì)響應(yīng)跳出舊控制器的成功事件。 showImg(https://segmentfault.com/img/bVSqTU?w=850&h=460); 在Web應(yīng)用開(kāi)發(fā)領(lǐng)域,Angular被認(rèn)為是最好的開(kāi)源JavaScri...

    孫淑建 評(píng)論0 收藏0
  • vue,angular4,react如何搭建完美工程項(xiàng)目

    摘要:之搭建前端三大框架基礎(chǔ)項(xiàng)目支持特點(diǎn)支持多入口頁(yè)面自動(dòng)生成在目錄下會(huì)創(chuàng)建或者下會(huì)自動(dòng)生成文件自定義模板下創(chuàng)建與同名的優(yōu)先使用自定義模板否則使用作為模板同時(shí)支持與作為模板同時(shí)支持與編寫(xiě)樣式自動(dòng)構(gòu)建目錄在目錄下配置文件 vue,angular4,react 之webpack搭建 前端三大框架基礎(chǔ)項(xiàng)目 webpack3 + typescript+react https://github.com...

    klivitamJ 評(píng)論0 收藏0
  • Angular4之五 服務(wù)器通訊

    摘要:可以與任何支持與服務(wù)器進(jìn)行通訊。首先,我們使用用語(yǔ)言創(chuàng)建一個(gè)服務(wù)器。一創(chuàng)建服務(wù)器步驟創(chuàng)建一個(gè)空的項(xiàng)目,取名為,名字可以按照情況而取。中,處理異步代碼通常有種方式回調(diào)承諾可觀察對(duì)象使用命令行組件名實(shí)例組件名為。運(yùn)行時(shí)發(fā)生錯(cuò)誤,提示改為則正常。 Angular可以與任何支持http與websocket服務(wù)器進(jìn)行通訊。 首先,我們使用node.js用typescript語(yǔ)言創(chuàng)建一個(gè)web服務(wù)...

    Taste 評(píng)論0 收藏0
  • 手把手教你用typescript+nodejs+mongoDB+vue2+angular4仿簡(jiǎn)書(shū)

    摘要:前端的所使用的技術(shù)棧后端這個(gè)小項(xiàng)目才開(kāi)始,使用已經(jīng)搭建好了前端開(kāi)發(fā)環(huán)境及相應(yīng)的的配置。接下來(lái)我會(huì)帶著大家一起完成整個(gè)簡(jiǎn)書(shū)的開(kāi)發(fā)工作。 這是一個(gè)開(kāi)源的個(gè)人項(xiàng)目。 前端的所使用的技術(shù)棧: typescriptes6vue2vue-cliwebpack2axiosangular4angular-cli 后端: nodejsmongoDBejs 這個(gè)小項(xiàng)目才開(kāi)始,使用vue-cli已經(jīng)搭建好了...

    liuchengxu 評(píng)論0 收藏0
  • 前端框架這么多,該如何抉擇?

    摘要:在引起狀態(tài)變化的時(shí)刻,框架自動(dòng)觸發(fā)臟檢查,也可以手動(dòng)執(zhí)行臟檢查,直接操作更新視圖。最后,說(shuō)了這么多,大家在具體選型時(shí)還是要首先分析自己的需求和現(xiàn)狀,然后再做選擇。 作為一個(gè)軟件開(kāi)發(fā)者,最大的挑戰(zhàn)就是在不斷涌現(xiàn)的新技術(shù)中進(jìn)行取舍,持續(xù)學(xué)習(xí)是從事這一行業(yè)的必備技能。在這個(gè)領(lǐng)域里,技術(shù)更新最快地又非前端莫屬了。各種框架的出現(xiàn)、版本的更新此起彼伏,呈現(xiàn)出一派欣欣向榮之景。 在項(xiàng)目中必不可少的便...

    Jackwoo 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<