摘要:引言是用于構建基于瀏覽器的復雜應用的下一代框架。它涵蓋了的一些基本概念,包括組件模型服務管道傳入傳出以及事件播散等使用方法,并介紹了項目的基本組織結構等。用于雙向綁定,使用來定義,專門用于定義雙向綁定。
引言
Angular2 是 Google 用于構建基于瀏覽器的復雜應用的下一代 MV* 框架。該項目是我學習 Angular2 的入門項目,我覺得它很友好地表達了 Angular2 的有趣實現方式,并更易于了解和入門。它涵蓋了 Angular2 的一些基本概念,包括:組件(Component)、模型(Model)、服務(Service)、管道(Pipe)、傳入傳出(Input / Output)以及事件播散(EventEmitter)等使用方法,并介紹了項目的基本組織結構等。
Anguar2 可使用 ES6 或 TypeScript 來編寫,我在這里使用了 TypeScript。
若您對本文感興趣,也非常歡迎來我的 GitHub 主頁閱讀,同時也是本文的項目代碼地址(https://github.com/DotHide/angular2-quickstart)
以下羅列的是該項目中的幾個重要概念:
1 Component在 Angular2 中,Component 是我們在頁面中構建自定義元素和業務邏輯的主要方式。在 Angular1 中,我們則是通過 directives,controllers 以及 scope 來實現,而現在所有的這一切都結合到了 Component 中。Component 中需要定義 selector 和 templete,即組件生效的標記和對應的 HTML 模板
// Component 是 Angular2 提供的組件,使用前需要先 import import {Component} from "angular2/core"; @Component({ selector: "todo-input", template: `` })
其中 templete 使用到了多行模板的用法,即使用`作為模板開始結束標記
定義組件后需要定義相匹配的類:
export class TodoInput { }
類名使用 UpperCamelCase,如:TodoInput,文件名及 selector 使用 DashCase,如:todo-input(.ts)
任何 Component 在使用前需要 import,如果是組件中的組件需要在 @Component 中定義 directives,如:
@Component({ selector: "todo-app", directives: [TodoInput], templete: "..." })2 Model
模型比較簡單,通知只需要定義好構造函數及相關方法即可:
export class TodoModel{ constructor( public title:string = "", public status:string = "started" ){} toggle():void{ this.status = this.status == "completed"? "started": "completed"; } }
這里構造函數的參數定義了 public,這樣可以被其他類訪問到
3 Service服務通常需要聲明 @Injectable(),一般服務也會 import 模型類
import {Injectable} from "angular2/core"; import {TodoModel} from "../models/todo-model"; @Injectable() export class TodoService { todos:TodoModel[] = [ new TodoModel("arm"), new TodoModel("battle"), new TodoModel("code", "completed"), new TodoModel("eat"), new TodoModel("fly"), new TodoModel("sleep", "completed") ]; addTodoItem(item:TodoModel) { ... } toggleTodo(todo: TodoModel) { ... } }
聲明了 Injectable 之后,需要在入口函數中 inject 相關服務
bootstrap(TodoApp, [TodoService]);4 ngFor
即 Angular 1 中的 ng-repeat,這里用法有些差異,如:
使用 ngFor 時需要在前加 號( 號表示該動作將引起模板的變化),循環中的個體元素引用前需要添加 # 號,這些都是語法上的變化。
5 ngModelngModel 用于雙向綁定,使用 [(ngModel)]= 來定義,[()] 專門用于定義雙向綁定。
@Component({ selector: "todo-input", template: `` }) export class TodoInput { todoItem:TodoModel = new TodoModel(); constructor() {} }
使用 ngModel 前需要在 class 中定義變量,變量可以是任何類型。
6 Pipe利用 Pipe 來篩選(filter)數據,與 Angualr1 十分類似,這里還是使用 | 符號來定義篩選,如:
// todo-list.ts ... @Component({ selector: "todo-list", pipes: [SearchPipe], directives: [TodoItemRender], template: `` }) // search-pipe.ts ... @Pipe({ name: "search" }) export class SearchPipe { transform(items) { // 定義轉換邏輯,用于結果輸出,這里是篩選出以 s 字符開頭的項目 return value.filter((item) => { return item.title.startsWith("s"); }); } }
使用 Pipe 時需要先在 Component 中定義 pipes 屬性,然后在 html 中使用 Pipe 的 name。
當然,這里的 Pipe 還可以傳遞參數,仍然以上面的為例,可以傳參設定 search 的內容,如:
// search-pipe.ts ... @Pipe({ name: "search" }) export class SearchPipe { // 增加 term 參數 transform(items, [term]) { // 定義轉換邏輯,用于結果輸出,這里是篩選出以 s 字符開頭的項目 return value.filter((item) => { return item.title.startsWith(term); }); } }
這里分兩步修改,首先修改 SearchPipe 類中的方法,增加 term 參數,然后再修改使用處的代碼
// todo-list.ts ... @Component({ selector: "todo-list", pipes: [SearchPipe], directives: [TodoItemRender], template: `` })
這里我們先看到 search 進行了賦值,我們進一步把這個賦值變為一個輸入項(@Input),這也是 Angular2 中特殊用法:
// todo-list.ts import {Component, Input} from "angular2/core"; ... @Component({ selector: "todo-list", pipes: [SearchPipe], directives: [TodoItemRender], template: `` }) export class TodoList { @Input() term; // 定義該項是從外部輸入的 constructor(public todoService: TodoService) { } }
由此,需要在使用 TodoList 組件的地方(即外部),定義相關的屬性。
...
這里表示從搜索框輸入過來的值(前一個 term),被賦值到了 todo-list 的 [term] 屬性中,并傳遞到 TodoList 類的輸入項中去
7 EventEmitter事件散播,又一個 Angular2 的新特性,用于將組件內部的事件向上散播,如:
@Component({
selector: "todo-item-render",
template: `
{{ todo.title }}
`
})
export class TodoItemRender {
@Input() todo;
@Output() toggle = new EventEmitter();
}
這里的 toggle 是 EventEmitter 對象,被聲明為 Output 后,可以將按鈕的 click 事件向上散播成為 todo-list 中該組件的 toggle 事件,其中的 $event 就是 TodoItemRender 類中聲明的 todo(此 todo 又是來自外部輸入),而后再觸發 toggle 事件對應的業務邏輯。
啟動請按以下步驟打開項目:
# 安裝 TypeScript $ npm install -g tsd typescript # 安裝項目依賴 $ npm install # 啟動項目 $ npm start花絮
琢磨調用第三方庫花了些時間,這里也記錄一下。以添加 lodash 庫為例,需要經過如下5個步驟:
Step 1$ npm install lodash --save
Step 2安裝后到 package.json 文件中查看,如有 loash 再進入下一步
$ tsd install lodash
Step 3如果沒有 tsd 命令行工具,則先安裝 $ npm install -g tsd
在 index.html 文件中引用:
Step 4在 System.config() 中添加 path:
System.config({ paths: { lodash: "./node_modules/lodash/lodash.js" } });Step 5
在需要使用的地方 import:
import * as _ from "lodash"; ... function (){ _.sum([4, 2, 8, 6]); // → 20 }參考鏈接
Angular 2 5mins Quickstart
Angular 2 Fundaments
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78792.html
Problem Given an integer array, sort it in ascending order. Use quick sort, merge sort, heap sort or any O(nlogn) algorithm. Example Given [3, 2, 1, 4, 5], return [1, 2, 3, 4, 5]. Note 考察對Heap Sort, Q...
摘要:理解最關鍵的是結束后各個指針的狀態,以及下一步遞歸的起止點。上面的模板在結束時是的狀態,但是不確定中間還有沒有一個數,如下圖今天在圖書館寫碼沒有帶板子,就先照個圖了注意里是里一定要注意這個靈活多變照這個思路的相關題 首先是記錄一個quick sort的模板(思想是遇到不符合順序的就交換,很好理解):public void quickSort(int[] nums, int start,...
摘要:本文主要講解的入門。可以幫助我們管理包的下載依賴部署發布等。可以認為是中的。后續使用中,全部替換為即可。命令根據它,自動下載所需模塊用于創建窗口和處理系統事件安裝包的位置。 Electron是什么 可以認為Electron是一種運行環境庫,我們可以基于此,用HTML、JS和CSS寫桌面應用。PC端的UI交互,主要有web應用和桌面應用。具體采用哪種方式,主要看系統的應用場景,哪個更合適...
摘要:常見排序算法及其實現說明如果有幸能看到本文中的代碼是參考編程思想某培訓機構。若兩個記錄和的關鍵字相等,但排序后的先后次序保持不變,則稱為這種排序算法是穩定的。 常見排序算法及其實現 說明 如果有幸能看到 1、本文中的代碼是參考《Java編程思想》、某培訓機構。 2、文中的代碼放Github了,有興趣的可以看看,點個star鼓勵下我。 3、代碼在Sublime中敲的,坑爹的GBK,注釋...
閱讀 2207·2021-10-18 13:28
閱讀 2520·2021-10-11 10:59
閱讀 2345·2019-08-29 15:06
閱讀 1137·2019-08-26 13:54
閱讀 814·2019-08-26 13:52
閱讀 3151·2019-08-26 12:02
閱讀 3005·2019-08-26 11:44
閱讀 2515·2019-08-26 10:56