---
# System prepended metadata

title: 多奇 2020 年 2 月新人職前培訓班
tags: [Training, Course]

---

# 多奇 2020 年 2 月新人職前培訓班
###### tags: `Training` `Course`
[課程連結](https://github.com/changda0616/doggy-training-autocomplete-lesson)
### 課程議題
1. directive
* 結構型 - 更改 DOM 結構 ex: `NgIf`, `NgFor`, `NgSwitch`
* 屬性型 - 更改元素外觀或行為 ex: `NgStyle`, `NgClass`
* 元件型 - 含有樣板的 directive

2. 四種繫結方式
* 內嵌繫結 ( interpolation )
```javascript=1
{{statement}}
```
*  屬性繫結 ( Property Binding )
```javascript=1
[propertyName]="statement"
[attr.attributeName]="statement"
```
*  事件繫結 ( Event Binding )
```javascript=1
(eventName)="someMethod($event)"
(eventName.key)="someMethod($event)"
```
* 雙向繫結 ( Two-way Binding )
```javascript=1
[(ngModel)]='property'
```

3. 範本參考變數 - Template reference variables
以 `#name`  為例
* 在範本內建立一個名為 name 的區域變數
* 只能用於目前元件範本
* 儲存該標籤的 DOM 物件
* 「事件繫結」將任意 DOM 物件中的任意屬性傳回元件
4. 命名規則 - 動詞 + 名詞 with camelCase

---

### 步驟
- 增加 input 並綁定事件
    - event binding
- rxjs fromEvent
    - 範本參考變數
        - [static 解釋](https://blog.kevinyang.net/2019/05/29/angular-static-viewchild/)
            - 無綁定結構型 directive -> true
            - 有綁定結構型 directive -> false 並在 `AfterViewInit` 取得 DOM
- 發出 http get, 拿到資料後更新資料
- 利用 ngFor 渲染 list 並編輯 css
- 增加上下鍵控制, 利用內建 keycode 屬性, 更新 activeIndex, 新增 li 的 ngclass
- 將屬性 inputValue 綁定 ngModel 按下 enter 更新 inputValue

---

### 回顧
1. 範本參考變數 scope
2. 發出 http get complete？
3. ngfor index 從幾開始？
4. ngmodelchange vs change

---

### 回家作業
1. 完成點擊更新 input 的邏輯
2. 讓下鍵移到超過最後一個選項時，回到第一個（上鍵反之）
3. 移除 keyup 事件並改用 `RxJS` 方式做監聽並嘗試觸發頻率的優化
4. 新增 `autocomplete` 元件，將部份 `app.component.ts` 的邏輯移植 ，讓其成為可重複使用的元件
