1. 程式人生 > >ionic昇華過程3-angularjs2入門

ionic昇華過程3-angularjs2入門

一。angular2js簡介

Angular2 是一款開源JavaScript庫,由Google維護,用來協助單一頁面應用程式執行。Angular2 是 Angular 1.x 的升級版本,效能上得到顯著的提高,能很好的支援 Web 開發元件。Angular2 釋出於2016年9月份,它是基於ES6來開發的。

angularjs2中的模組定義標記(NgModule)

 NgModule的主要屬性如下:

  • declarations:模組內部Components/Directives/Pipes的列表,宣告一下這個模組內部成員
  • providers:指定應用程式的根級別需要使用的service。(Angular2中沒有模組級別的service,所有在NgModule中宣告的Provider都是註冊在根級別的Dependency Injector中)
  • imports:匯入其他module,其它module暴露的出的Components、Directives、Pipes等可以在本module的元件中被使用。比如匯入CommonModule後就可以使用NgIf、NgFor等指令。
  • exports:用來控制將哪些內部成員暴露給外部使用。匯入一個module並不意味著會自動匯入這個module內部匯入的module所暴露出的公共成員。除非匯入的這個module把它內部匯入的module寫到exports中。
  • bootstrap:通常是app啟動的根元件,一般只有一個component。bootstrap中的元件會自動被放入到entryComponents中。
  • entryCompoenents: 不會在模板中被引用到的元件。這個屬性一般情況下只有ng自己使用,一般是bootstrap元件或者路由元件,ng會自動把bootstrap、路由元件放入其中。 除非不通過路由動態將component加入到dom中,否則不會用到這個屬性。

  每個Angular2的應用都至少有一個模組即根模組。

二。angularjs2安裝 

  安裝angularjs的客戶端 

cnpm install -g @angular/cli

安裝完成後 安裝一個ng命令  ng幫助

ng --help
ng new --help 新疆專案
E:\nodejs\my-app>ng new --help
usage: ng new <name> [options]
options:
  --collection (-c)
    Schematics collection to use.
  --directory
    The directory name to create the workspace in.
  --dryRun (-d)
    Run through without making any changes.
  --force (-f)
    Forces overwriting of files.
  --inline-style (-s)
    Specifies if the style will be in the ts file.
  --inline-template (-t)
    Specifies if the template will be in the ts file
  --new-project-root
    The path where new projects will be created.
  --prefix (-p)
    The prefix to apply to generated selectors.
  --routing
    Generates a routing module.
  --skip-git (-g)
    Skip initializing a git repository.
  --skip-install
    Skip installing dependency packages.
  --skip-tests (-S)
    Skip creating spec files.
  --style
    The file extension to be used for style files.
  --verbose (-v)
    Adds more details to output logging.
  --view-encapsulation
    Specifies the view encapsulation strategy.

建立angularjs專案 (這裡注意 如果直接生成專案 會使用npm去下js模組 非常慢 建立專案 直接生成檔案 後面使用cnpm安裝)

ng new my-app --skip-install

執行結果如下(後面會使用git 沒安裝不影響)

E:\nodejs>ng new my-app --skip-install
CREATE my-app1/angular.json (3557 bytes)
CREATE my-app1/package.json (1312 bytes)
CREATE my-app1/README.md (1023 bytes)
CREATE my-app1/tsconfig.json (408 bytes)
CREATE my-app1/tslint.json (2805 bytes)
CREATE my-app1/.editorconfig (245 bytes)
CREATE my-app1/.gitignore (503 bytes)
CREATE my-app1/src/favicon.ico (5430 bytes)
CREATE my-app1/src/index.html (293 bytes)
CREATE my-app1/src/main.ts (370 bytes)
CREATE my-app1/src/polyfills.ts (3194 bytes)
CREATE my-app1/src/test.ts (642 bytes)
CREATE my-app1/src/styles.css (80 bytes)
CREATE my-app1/src/browserslist (375 bytes)
CREATE my-app1/src/karma.conf.js (964 bytes)
CREATE my-app1/src/tsconfig.app.json (166 bytes)
CREATE my-app1/src/tsconfig.spec.json (256 bytes)
CREATE my-app1/src/tslint.json (314 bytes)
CREATE my-app1/src/assets/.gitkeep (0 bytes)
CREATE my-app1/src/environments/environment.prod.ts (5
CREATE my-app1/src/environments/environment.ts (642 by
CREATE my-app1/src/app/app.module.ts (314 bytes)
CREATE my-app1/src/app/app.component.html (1141 bytes)
CREATE my-app1/src/app/app.component.spec.ts (998 byte
CREATE my-app1/src/app/app.component.ts (211 bytes)
CREATE my-app1/src/app/app.component.css (0 bytes)
CREATE my-app1/e2e/protractor.conf.js (752 bytes)
CREATE my-app1/e2e/tsconfig.e2e.json (213 bytes)
CREATE my-app1/e2e/src/app.e2e-spec.ts (303 bytes)
CREATE my-app1/e2e/src/app.po.ts (208 bytes)
'git' 不是內部或外部命令,也不是可執行的程式

進入 my-app目錄 執行 cnpm install (自動根據package.json的依賴自動下載包) 時間會略長 之後就可以拷貝修改

cd my-app && cnpm install

開啟靜態web服務 並使用瀏覽器開啟測試

ng serve --open

自動開啟瀏覽器訪問(f12切換成手機模式)

http://localhost:4200/

使用vscode開啟 my-app目錄 編輯即可

四。angularjs2案例

為了快速進入angularjs2,瞭解開發過程,建議完整模擬官方的 英雄之旅案例(https://angular.io/tutorial
實現動態圖:


大概理解一下 一個專案分為很多模組(module 有個主模組app.module) 訪問的首頁是index.html
每個模組下有多個控制元件 預設(app.component) 控制元件由模板,樣式,資料組成最後生成html 比如控制元件的註解
 

@Component({
  selector: 'app-root',//控制元件的程式碼展示在父元件的哪個位置  用各種css選擇器
  templateUrl: './app.component.html',//控制元件指定的模板的位置
  styleUrls: ['./app.component.css']//控制元件指定的樣式的位置
  
})

表示將來模板的程式碼 生成在父容器下 selector是app-root(標籤選擇器)中 檢視 index.html

<app-root></app-root>

將來比如有其他控制元件 顯示在 app.component中 只需要在 app.componnet中新增一個標籤 制定選擇器到這個標籤即可

1》瞭解控制元件

 生成一個英雄的控制元件

C:\tttt\my-app>ng generate component heroes
CREATE src/app/heroes/heroes.component.html (25 bytes)
CREATE src/app/heroes/heroes.component.spec.ts (628 bytes)
CREATE src/app/heroes/heroes.component.ts (269 bytes)
CREATE src/app/heroes/heroes.component.css (0 bytes)
UPDATE src/app/app.module.ts (396 bytes)

 自動在app目錄下建立heroes目錄 生成控制元件
 修改 預設主控制元件  app.component 將標題資料修改為 :

title = '英雄之旅';

 將app.components.html只留下標題和一個父標籤用於插入 hero控制元件內容

 <h1>
    {{ title }}!
</h1>
<app-heroes></app-heroes>

  ng serve自動監控 檔案修改,開啟一次不用關了 直接訪問

分析一下 生成的程式碼結構 檢視控制元件檔案 heroes.component

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

@Component({
  selector: 'app-heroes',//選擇之前app.html中定義的那個標籤名 
  templateUrl: './heroes.component.html',
  styleUrls: ['./heroes.component.css']
})
export class HeroesComponent implements OnInit {

  constructor() { }

  ngOnInit() {  //控制元件被例項化 自動呼叫
  }

}

因為新的控制元件 生成在app這個模組中 開啟模組檔案

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

import { AppComponent } from './app.component';
//匯入了英雄模組 引入了類
import { HeroesComponent } from './heroes/heroes.component';

@NgModule({
  declarations: [
    AppComponent,
    HeroesComponent //不定義這個控制元件 如果app.component.html加了標籤 就會報錯
  ],
  imports: [
    BrowserModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

2》編輯英雄資料

  因為英雄可能存在多個屬性 比如id 和name 所以可以heroes目錄定義一個英雄的class

export class Hero{
    id:number;
    name:string;
}

在控制元件中heroes.component.ts 定義該hero的實際資料 

import { Hero } from './hero';//匯入Hero類
export class HeroesComponent implements OnInit {
  hero:Hero={
    id:1,
    name:"zs"
  };
//新增一個數據 資料+模板=html
}

 顯示英雄資料 並且將資料和編輯器繫結 
 

<h2>{{hero.name}} 詳細</h2>
<div><span>編號: </span>{{hero.id}}</div>
<div><span>姓名: </span>{{hero.name|uppercase}}</div>
<div>
  <label>name:
    <input [(ngModel)]="hero.name" placeholder="name">
  </label>
</div>

[(ngModel)]是繫結控制元件模型資料  該功能位於FormsModule控制元件中 模組中(app.module.ts)引入 並匯入

import { FormsModule } from '@angular/forms';
imports: [
    BrowserModule,FormsModule
  ],

最終效果(編輯文字框名字都跟著改變):

3》顯示多個英雄資料
 顯示多個英雄資料 並且點選某個英雄 自動編輯該英雄
控制元件中heroes.component.ts定義陣列的Hero

 heros:Hero[]=[{
    id:1,
    name:"張三"
  },{
    id:2,
    name:"李四"
  },{
    id:1,
    name:"王五"
  }];

修改模板 heroes.component.html 展示所有的資料

<h2>所有英雄</h2>
<ul>
  <!--
        *ngFor="let hero of heros" 表示迴圈模型 heros陣列 迴圈一次到臨時變數hero中下面就可以hero.屬性了
        class.樣式表=“滿足什麼條件就會自動新增該樣式表”
        (click)="onSelect(hero)" 表示點選時觸發事件 事件全部定義在控制元件中 選中了就將當前的hero賦值給 selectedHero物件

  -->
  <li *ngFor="let hero of heros"
    [class.selected]="hero==selectedHero"
    
    (click)="onSelect(hero)"
   >
    <span class="badge">{{hero.id}}</span> {{hero.name}}
  </li>
</ul>
<!--
  *ngIf判斷是否存在selectedHero屬性 點選行就有了
-->
<div *ngIf="selectedHero">
<h2>英雄:{{selectedHero.name}} 詳細</h2>
<div><span>編號: </span>{{selectedHero.id}}</div>
<div><span>姓名: </span>{{selectedHero.name|uppercase}}</div>
<div>
  <label>name:
    <input [(ngModel)]="selectedHero.name" placeholder="name">
  </label>
</div>
</div>

heroes.component.ts新增事件和選中的hero
 

selectedHero: Hero;
  onSelect(hero: Hero): void {
    this.selectedHero = hero;
  }

最終效果 初始化

點選任意一個英雄(文字框修改 列表資料跟著修改)

4》將英雄資料放入service

 之前將資料直接定義在components中 組建應該更加關注的view層 service負責讀取資料 
生成service 檔案 hero.service.ts

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

@Injectable({
  providedIn: 'root'
})
export class HeroService {

  constructor() { }
}

Injectable註解表示 將它新增到提供者中 root表示隨處都可以裝配
修改原始碼 service 將資料放在service中 將來發起http連線

import { Injectable } from '@angular/core';
import { Hero } from './heroes/hero';
@Injectable({
  providedIn: 'root'
})
export class HeroService {

  heros:Hero[]=[{
    id:1,
    name:"張三"
  },{
    id:2,
    name:"李四"
  },{
    id:3,
    name:"王五"
  }];
  getHeroes():Hero[]{
    return this.heros;
  }
  constructor() { }
}

修改控制元件類 注入service

import { Component, OnInit } from '@angular/core';
import { Hero } from './hero';
import { HeroService } from '../hero.service';
@Component({
  selector: 'app-heroes',
  templateUrl: './heroes.component.html',
  styleUrls: ['./heroes.component.css']
})
export class HeroesComponent implements OnInit {
  heros:Hero[];
  selectedHero: Hero;
  onSelect(hero: Hero): void {
    this.selectedHero = hero;
  }

  constructor(private  helloService:HeroService) { }//注入service

  ngOnInit() {
    this.heros=this.helloService.getHeroes();//初始化時呼叫service獲取資料注入到控制元件屬性中
  }

}

相關推薦

ionic昇華過程3-angularjs2入門

一。angular2js簡介 Angular2 是一款開源JavaScript庫,由Google維護,用來協助單一頁面應用程式執行。Angular2 是 Angular 1.x 的升級版本,效能上得到顯著的提高,能很好的支援 Web 開發元件。Angular2 釋出於201

ionic昇華過程7-cordova工具

一。cordova簡介       Cordova 是使用HTML,CSS和JS構建移動應用的平臺。我們可以認為Cordova是一個工具,用於將我們的網路應用程式(javascript)與本機移動功能連線。預設情況下,Web應用程式不能直接呼叫本機移動功能。這就是Cordo

ionic昇華過程8-cordova外掛+mui小案例

一。mui簡介。    MUI是一套前端框架,由DCLOUD公司研發而成,提供大量H5和js語言組成的元件,大大提高了開發效率,可以用於開發web端應用、web app等應用,中國比較流行的前端工具Hbuilder也是出自該公司 Hbuilder中整合mui。hbuilde

樹莓派(raspberry pi) 3入門過程遇到的一些問題

raspberry pi3買回來也有幾天了,這幾天上班回家過年也沒有太多時間玩,現在就記錄一下入門遇到的一些問題吧。首先是燒寫映象,和安裝電腦系統是一樣的道理。先要有一個製作一個U啟動盤。先將SD卡格式化,再用Win32DiskImager將raspberry官方下載的映象燒

Mysql儲存過程3:if語句

sql語句 inpu arguments ted div mysql then for clas --if/else語句 if 條件 then SQL語句 else SQL語句elseifSQL語句 end if; create procedure test1( n

Citrix XenServer ? Workload Balancing 7.3 快速入門指南

Workload Balancin Citrix 思傑 XenServer 第?1?章?簡介XenServer Workload Balancing 虛擬設備是一種基於 Linux 的虛擬機,可用於在環境中快速部署XenServer Workload Balancing 功能。只需幾個簡單的步

Zabbix 3.0入門到企業實戰二(zabbix介紹與安裝)

分布 1.2 網絡狀態 需要 服務端 mysql 軟件 組織 lar Zabbix的簡介 1.1 什麽是zabbix? Zabbix是一個基於Web界面的分布式系統監控的企業級開源軟件。可以監視各種系統與設備的參數,保障服務器及設備的安全運營。Zabbix是一個

Zabbix 3.0入門到企業實戰三(zabbix監控主機-基礎監控配置)(

ima img back image 企業 pan 創建 zab AC 一:Zabbix監控主機-基礎監控配置 1.1配置監控主機 創建主機(先找到配置在找到主機,在創建主機) 點擊-->>配置-->>主機 主機配置如下:

zabbix-3.0TLS入門筆記

zabbix dingtalk 報警 zabbix-3.0TLS部署1.1 環境os版本:centos6.8版本:zabbix-3.0.15 PHP 5.6.34 Nginx-1.8.11.2安裝Nginxtar -zxf nginx-1.8.1.tar.gz

(5)Jquery1.8.3快速入門

code nextall first 當前 tex title cli AR UNC 一、Jquery的選擇器: 層級選擇器; 1、空格 div span div中的包含的所有span後代元素 2、 &

(6)Jquery1.8.3快速入門

ima jquery ade 過濾器 偶數 head function dex PE 一、Jquery的基本過濾選擇器: 基本過濾選擇器: 1、 :first 選取第一個元素 2、 :last 選取最後一個元素 3、:not(selector) 去除所有與給定

(8)Jquery1.8.3快速入門

isa PE tex utf pla 技術 doctype input meta 一、Jquery的可見性選擇器: 可見性選擇器: 1、:visable 篩選可以見的元素 2、 :hidden 篩選不可見的元素 效果: 源碼: <!DOCTYPE htm

EventBus 3.0: 入門使用及其使用 完全解析

ring 接收 ret .get parent tro eve cte idt 前言 EventBus是greenrobot再Android平臺發布的以訂閱-發布模式為核心的開源庫。 EventBus翻譯過來是事件總線意思。可以這樣理解:一個個(event)發送到總線上,

存儲過程3 帶參數修改存儲過程

reat cal alt limit int te pro sele pro bubuko in 輸入參數 delimiter $ create procedure pro_findId(in eid int ) begin select * from where i

Kubernetes 1.3入門到進階 安裝篇(1)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

MySQL的儲存過程和函式入門 第一篇

最近開發中用到儲存過程和函式,就順便學習一下了。 1.什麼是儲存過程和函式?   儲存過程和函式是事先經過編譯並存儲在資料庫的一段SQL語句集合,呼叫儲存過程和函式可以減少資料庫和應用伺服器之間的傳輸,對於提高資料處理的效率是有好處的。 2.儲存過程和函式的區別 函式

AM335x U-boot d程式碼分析過程3

    我們繼續上一篇的程式碼,已經來到s_init()(位於arch\arm\cpu\armv7\am335x\board.c),其原始碼如下: [cpp] view plain copy pr

OpenCV2/3基礎入門高清視訊教程

C++ OpenCV2/3基礎入門視訊教程 視訊試看片段(主要看講課風格和清晰度):連結:https://pan.baidu.com/s/1fxIz_2BG697isPXbmCI1aA 密碼:g5kw 淘寶網連結     https://item.taobao.

3.RobotFramework入門例項

一.介面詳解 1. project、suite頁面,edit欄 2.testcase頁面,edit欄 設定區:主要用來配製此TestCase執行階段的的操作 Documentation:說明,可新增TestCase的說明、上下文、引數說明、業務等。無內容限制

Kubernetes 1 3入門到進階 安裝篇(1)

Kubernetes 1.3 從入門到進階 安裝篇:minikube Kubernetes單機執行環境一直是一個沒有得到重視的問題。現在我們有了minikube,一個用go語言開發的可以在本地執行kubernetes的利器,不過目前應該只是支援kubernetes1.3。如果你只有一臺機器或