2020-07-21

核心知識:模塊、組件锐膜、模板毕箍、指令、數(shù)據(jù)綁定道盏、服務(wù)和依賴注入而柑、路由

一、模塊

(ng 中荷逞,模塊指的是項目中功能模塊媒咳,是一個抽象的概念,把功能劃分出來种远,如商品模塊涩澡,用戶模塊等。)

NG 中的模塊叫做 NgModule坠敷,與 ES 和 node.js 中‘模塊’概念不同妙同。

ES 和 node.js 模塊,一個文件就是一個模塊膝迎,可以導(dǎo)出內(nèi)部成員粥帚,引用其他模塊的成員。NG 中的模塊指項目中的 功能模塊限次。

主組件的作用

引導(dǎo)加載模塊的流程

二芒涡、組件

(組件是一塊可重復(fù)使用的頁面區(qū)域,有專有的樣式、模塊拖陆、數(shù)據(jù),表現(xiàn)上就是一個自定義標(biāo)簽)

在 login.ts 文件中

  1. 導(dǎo)入核心懊亡,為了能夠使用裝飾器
import {Component} from '@angular/core'
  1. 導(dǎo)出組件對象
export class Login{ }
  1. 寫裝飾器
@Component({  //裝飾器依啰,相當(dāng)于給Login貼上工牌   
  selector:'my-login',   
  template:'<h3>我的第一個angular組件</h3><br>'
 })
// 上面的代碼都是描述Login這個組件的數(shù)據(jù),那么上面每個數(shù)據(jù)都叫做元數(shù)據(jù)

在 app.Module.ts 中

  1. 組件必須去主模塊聲明一下 app.Module.ts

    4.1 導(dǎo)入子組件

import { Login } from './login';
4.2 注冊
@NgModule({    
  declarations: [        
    AppComponent,        
    Login    
  ],    ... })

在 app.component.html 中

5.使用自定義組件 app.component.html 中

<my-login></my-login>

三店枣、數(shù)據(jù)綁定

angular 數(shù)據(jù)綁定

VueJS 數(shù)據(jù)綁定

m--v: 插值表達式

{{}}

{{}}

m--v: 屬性綁定

[src]=

v-bind: :src

v--m: 事件綁定

(click)

v-on @click='delect'

雙向綁定

[(value)]

v-model:value

數(shù)據(jù)綁定

import {Component} from '@angular/core'
@Component({
    selector:'emp-info',
    template:`
       <h3>員工信息</h3> 
       <div>員工姓名:{{emp.ename}}</div>
       <div>員工姓名:{{emp.ename.toUpperCase()}}</div>
       <div>員工姓名:{{emp.ename.toUpperCase().slice(2)}}</div>
       <div>員工薪資:{{'¥'+emp.salary*12}}</div>
       <div>員工性別:{{emp.gender==1 ? '男':'女'}}</div>
       <div>員工生日:{{emp.birthdate}}</div>
       <div>員工項目:{{emp.projectList}}</div>
       <ul>
           <li>{{emp.projectList[0]}}</li>
           <li>{{emp.projectList[1]}}</li>
           <li>{{emp.projectList[2]}}</li>
       </ul>
       // <div>{{emp}}</div>
       // vuejs 中這種寫法速警,會自動轉(zhuǎn)換成 json 字符串
       // ng 不能自動轉(zhuǎn) ng 是 [Object Object] 
  
      // <div>{{JSON.stringify(emp)}}</div>
      // <div>{{new Date(emp.birthdate).getFullYear())}}</div>
      // <div>{{parseInt(123.456))}}</div>
      // 插值表達式中不能使用任何全局對象
    `
})
?
export class EmpInfo{
    num = 12.5;
    emp={
        ename:'lilei',
        gender:1,
        salary:10000,
        birthdate:1501234567890,
        projectList:['項目1','項目2','項目3']
    };
    showInfo() {
        console.log('調(diào)用了showInfo()');
        return '123';
    }
}

重點知識:

{{}}插值表達式,與vuejs的不通用

  1. 不能使用關(guān)鍵字new new Date

  2. 不能使用全局函數(shù) parseInt

  3. 不能使用全局對象 window鸯两、json

四闷旧、指令

Vuejs 提供13個指令

v-for、v-if钧唐、v-else-if忙灼、v-else、v-show

v-bind:/:钝侠、v-on:/@

v-html该园、v-text、v-cloak

v-once v-pre

v-model

angular中的指令分為三類(common 自動導(dǎo)包帅韧、forms 和 router 自行導(dǎo)包)

  1. 組件就是一種特殊的指令:NG中組件繼承自指令里初,組件是一種特殊的指令

Component extends Direvtive

  1. 結(jié)構(gòu)型指令,影響dom樹結(jié)構(gòu)的指令忽舟,必須以*號開頭

ngFor 双妨、ngIf 、ngSwitchCase叮阅、ngSwitchDefault

  1. 屬性型指令刁品,會影響dom元素的屬性值 (類似:bind),必須使用[ ]括起來

[ngClass] [ngStyle] [ngSwitch] [(ngModel)]

  1. *ngFor:對數(shù)組或者對象進行遍歷帘饶。使用這個指令哑诊,自動生成一個 index 也就是下標(biāo)值
// html
<button (click)="addScore()">給數(shù)據(jù)添加隨機數(shù)</button>
<h3>遍歷數(shù)組</h3>
<ul>
  <li *ngFor="let score of scores;let i=index">
    {{score}}--{{i}}
  </li>
</ul>
?
// component.ts
scores = [89, 91, 71];
addScore() {
    const num = Math.floor(Math.random() * 100);
    this.scores.push(num);
}
=======================================================================
// html
<h3>刪除數(shù)據(jù)</h3>
<table>
  <thead>
    <tr>
      <th>編號</th>
      <th>姓名</th>
      <th>性別</th>
      <th>操作</th>
    </tr>
    <tr *ngFor="let e of elist">
      <td> {{e.eid}} </td>
      <td> {{e.ename}} </td>
      <td> {{e.gender==1?'男':'女'}} </td>
      <td>
          <button (click)="delete(i)">刪除</button>
      </td>
    </tr>
  </thead>
</table>
?
// component.ts
elist = [
    { eid: 101, ename: 'dingding', gender: 1 },
    { eid: 102, ename: 'tuangtuang', gender: 0 },
    { eid: 103, ename: 'biangbiang', gender: 1 },
  ];
?
  delete(index) {
    this.elist.splice(index, 1);
  }
  1. *ngIf:true 則掛載指定元素,false 刪除指定元素
// html
<button (click)="isShow=!isShow">顯示與隱藏</button>
<ng-container *ngIf="isShow; else noShow">
    顯示
</ng-container>
<ng-template #noShow>
    隱藏
</ng-template>
// component.ts
isShow=true;
  1. ngSwitch:實現(xiàn)多條件判定

傳統(tǒng)switch

var status=10及刻;switch(status){
  case 10:   ...
   break;
  case 20:   ...
   break;
  default:
    ...}

ngSwitch——屬性指令 [ngSwitch]=10

ngSwitchCase——結(jié)構(gòu)指令 *ngSwitchCase=10

ngSwitchDefault——結(jié)構(gòu)指令 *ngSwitchDefault

面試會問 ngSwitch 是什么指令镀裤?

<div [ngSwitch]="status">
    <p *ngSwitchCase="1">
        等待...
    </p>
    <p *ngSwitchCase="2">
        完結(jié)...
    </p>
    <p *ngSwitchDefault>
        走起...
    </p>
</div>
status=1;
  1. ngStyle 和 ngClass
import { Component } from "@angular/core";
 
@Component({
  selector:'style-class-demo',
  // 使用css屬性選擇器要要引入css文件
  styleUrls:['../assets/css/bgcolor.css'],
  template:`
  <h3>ngStyle和ngClass的演示</h3>
  <p [ngStyle]='{"background-color":"#006699"}'>第一段話</p>
  <p [ngStyle]='styleObj'>第二段話</p>
  <div [ngClass]='classObj'>class</div>`
})
export class StyleClassDemo{
  styleObj={
    'background-color':'#990066',
    'color':'#fff'  
  };
   classObj={'bgcolor':true};
 }

注意:

使用 NgClass 需要在 @Component 中引用寫好的 css 樣式

styleUlrs: ['../assets/css/*.css']

其實,搞個全局 css 文件就行缴饭,其他筆記中會介紹 css 文件的引用方式暑劝。

  1. 自定義指令
import {  Directive, ElementRef } from "@angular/core";
?
@Directive({
  //定義使用指令時的名稱
  selector:'[xzFocus]'
})
export class xzFocus{
  // 指令的真正作用---構(gòu)造函數(shù)
  // 如何獲取當(dāng)前的 dom 節(jié)點對象 el:ElementRef 
  // 只能獲得當(dāng)前元素對象,無法獲得當(dāng)前元素
  constructor(el:ElementRef){
    // el.nativeElement 才是真正的 dom 樹上的對象
    console.log(el.nativeElement);
    // 哪一個元素獲取焦點
    el.nativeElement.focus()
}

總結(jié):

  1. 裝飾器是 @Directive

  2. 裝飾器中的 selector:'[xzFocus]'

  3. 注冊與 component 一樣

  4. 使用 <input xzFocus>

  5. 在對象的構(gòu)造函數(shù)中颗搂,寫真正的指令作用代碼

  6. 如果獲取當(dāng)前使用指令的 dom 對象

    通過參數(shù) el:ElementRef(ElementRef 需要引用)

    el.nativeElement ---> 才是使用指令的 dom 對象

  1. 雙向綁定 [(ngModel)]

使用ngModel的步驟

1.導(dǎo)入包@angular/Forms中的{ FormsModule }

2.在模塊中的imports屬性中注冊這個對象担猛,才能使用

3.使用雙向綁定 [(ngModel)]='kw'

import { Component } from "@angular/core";
 
@Component({
    selector:'ngmodel-demo',
    template:`
        <h3>雙向綁定的演示</h3>
        <input type="text" [(ngModel)]='kw'>
        <p>{{ kw }}</p>`
})
export class NGModelDemo{
    // 雙向綁定找不到數(shù)據(jù)了
    // view中kw
    innerkw='Dell';
    get kw(){
        console.log('get kw');
        return this.innerkw;
    }
    // 只要有人想改變 kw,set 會自動調(diào)用
    set kw(val){
        console.log('set kw');
        this.innerkw = val;
        //此處可以根據(jù)用戶的輸入執(zhí)行 XHR 的異步請求
    }
}
練習(xí):模擬百度搜索自動聯(lián)想
VueJS 中
new Vue({
    data(){
        return { kw=''}
        },
     watch{ 
         kw:function()}
         }
});

Angular 中,使用set/get方法傅联,對數(shù)據(jù)進行監(jiān)聽

import { Component } from "@angular/core";
 
@Component({
  selector:'ngmodel-demo',
  template:`
    <h3>雙向綁定的演示</h3>
    <input type="text" [(ngModel)]='kw'>
    <p>{{kw}}</p>
  `
})//55下課 先改,10點07上課
export class NGModelDemo{
  //雙向綁定找不到數(shù)據(jù)了
  //view中kw
  innerkw='Dell';
  get kw(){
    console.log('get kw');
    return this.innerkw;
  }
  //只要有人想改變KW,set會自動調(diào)用
  set kw(val){
    console.log('set kw');
    this.innerkw=val;
    //此處可以根據(jù)用戶的輸入執(zhí)行XHR的異步請求
  }
}

?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蒸走,一起剝皮案震驚了整個濱河市仇奶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌比驻,老刑警劉巖该溯,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異别惦,居然都是意外死亡狈茉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門掸掸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氯庆,“玉大人,你說我怎么就攤上這事猾漫〉闱纾” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵悯周,是天一觀的道長粒督。 經(jīng)常有香客問我,道長禽翼,這世上最難降的妖魔是什么屠橄? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮闰挡,結(jié)果婚禮上锐墙,老公的妹妹穿的比我還像新娘。我一直安慰自己长酗,他們只是感情好溪北,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著夺脾,像睡著了一般之拨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上咧叭,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天蚀乔,我揣著相機與錄音,去河邊找鬼菲茬。 笑死吉挣,一個胖子當(dāng)著我的面吹牛派撕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播睬魂,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼终吼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了氯哮?” 一聲冷哼從身側(cè)響起衔峰,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛙粘,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體威彰,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡出牧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了歇盼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舔痕。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖豹缀,靈堂內(nèi)的尸體忽然破棺而出伯复,到底是詐尸還是另有隱情,我是刑警寧澤邢笙,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布啸如,位于F島的核電站,受9級特大地震影響氮惯,放射性物質(zhì)發(fā)生泄漏叮雳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一妇汗、第九天 我趴在偏房一處隱蔽的房頂上張望帘不。 院中可真熱鬧,春花似錦杨箭、人聲如沸寞焙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捣郊。三九已至,卻和暖如春擒悬,著一層夾襖步出監(jiān)牢的瞬間模她,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工懂牧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留侈净,地道東北人尊勿。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像畜侦,于是被迫代替她去往敵國和親元扔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容