---
# System prepended metadata

title: "\U0001F4CC[R]2020/04/29前端會議"
tags: [會議紀錄]

---

###### tags: `會議紀錄`
###### Thunder:
###### CodeReview A1: `Textarea height auto` `a1notice` `e-c-order 電商各自Service` 
###### CodeReview 行動版:`List刪除問題 event.target.innerText` `套件mbsc設置maxLength無效問題`
###### CodeReview CSS: `行動版 #新增客戶-新增聯絡人CSS md ios`
###### Announcement:
###### Attendee: 政儀、永佳、偉恩、弘翊、政儒
# 📌[R]2020/04/29前端會議
## 踩雷事件
### ⚡無踩雷事件

## 寫法交流
### ⛏網頁版
#### #1 Textarea height auto
* 備註欄位的畫面顯示高度要與內容的高度一致，讓內容可以一次看清。
* 透過scrollHeight 來設定高度

==textarea-auto-resize-directive.ts==
```typescript=
import { Directive, HostListener, Input, ElementRef, OnInit } from '@angular/core';

@Directive({
  selector: '[appTextareaAutoResize]'
})

/**自動調整Textarea 高度 */
export class TextareaAutoResizeDirective implements OnInit {

  /**設定最大高度 */
  @Input('appTextareaAutoResize') maxHeight: number;

  @HostListener('input', ['$event.target'])
  onInput(textArea: HTMLTextAreaElement): void {
    this.autoResize();
  }

  constructor(
    private element: ElementRef
  ) { }

  ngOnInit(): void {
    this.autoResize(); // 設定初始高度
  }

  private autoResize(): void {
    const textArea = this.element.nativeElement as HTMLTextAreaElement;
    let newHeight: number;

    if (textArea) {
      textArea.style.overflow = "hidden";
      textArea.style.height = "auto";
      if (this.maxHeight) {
        newHeight = Math.min(textArea.scrollHeight, this.maxHeight);
      } else {
        newHeight = textArea.scrollHeight;
      }
      textArea.style.height = newHeight + "px";
    }
  }
}

```
* 如果想讓textarea id=memo每支都使用，但又不想一支一支調整掛上，可以調整selector

元件是textatea且id=memo的
```typescript
@Directive({
  selector: 'textarea[id="Memo"]'
})
```
不分元件id=memo的
```typescript
@Directive({
  selector: '[id="Memo"]'
})
```


#### #2 a1notice
A1有時候跳出自己跳出訊息，類似
![a1notice](https://i.imgur.com/ZCKMoA1.png)
這是透過a1notice來接收顯示(SignalR)，如果有要新增訊息內容，要一定要記得維護下面的程式

==a1-notice-message-controller.ts==
* 若訊息是要在特定的時候顯示，就要在 controlMessage 中做以下處理
```typescript
controlMessage(iA1NoticeRespone: IA1NoticeRespone) {
    // 需特殊處理
    if ((msgCode === ('' + [msgCode]))) {
      this.[Subject].next(msgCode);
      return;
    }
}
```
* 如果沒有特別需求，訊息會在完成時直接顯示訊息。

==a1-notice-message-controller.enum.ts==
* 這支是用來維護NoticeCode編到幾號了
```typescript
enum NoticeCode {
    /**errorMessageContext的訊息*/
    errorMsg0000 = [0000],
}
```

#### #3 e-c-order 電商各自自己的Service
==e-c-to-orders-component.ts==
這支目前程式會越來越大包，可以把ECToOrdersService拆成各自電商自己一支。

### ⛏行動版
#### #1 List刪除問題 event.target.innerText
* Q: 安卓、電腦使用可以正常刪除，但蘋果不能刪除
* A: event.target會依照目前環境給值，所以在不同環境下，可能會拿到不同的參數值
```typescript
actions: {
      left: [
        {
          text: '刪除',
          color: "#f70000",
          action: (event, inst) => {
            console.log('刪除', event.target.innerText);
            // const aa = this.delete.emit({ data: event.target.innerText, index: event.index });
            this.delete.emit({ data: this.dataToShow[event.index - 1], index: event.index });
          }
        }
      ],
}
```
#### #2 新增客戶-新增聯絡人CSS md ios
* Q: 安卓的手機上警示窗的button會被蓋住。
* A: 加入CSS控制，==.md只有安卓有效、.ios只有蘋果有效==
```css
ion-app.md .createContactN{
}

ion-app.ios .createContactN{
}
```
#### #3 套件mbsc設置maxLength無效問題
>[mobiscroll input搭配maxlength](https://www.notion.so/mobiscroll-input-maxlength-5f6704ecccf5459d9b6b1e1f25668f31)
> [name=永佳]
* maxLength不是無效，而是沒有設定到元件上
* 可以使用input-length這個Directive掛在html maxLength就會有效果了

==input-length.ts==
```typescript=
import { Directive, HostListener, ElementRef } from '@angular/core';

@Directive({
  selector: '[input-length]' // Attribute selector
})
export class InputLengthDirective {
  maxlength: string = '0';

  constructor(private el: ElementRef,
  ) {
    const attributes: Array<any> = this.el.nativeElement.attributes;
    const attributesKeys = Object.keys(attributes);
    let attributes_Array = [];

    for (let x = 0; x < attributesKeys.length; x++) {
      attributes_Array.push(attributes[x]);
    }
    /** 找出maxlength元素 */
    const attributesMaxLength = attributes_Array.find(x => x.name === 'maxlength');
    if (attributesMaxLength) {
      /** 將設定好的長度value塞到變數內 */
      this.maxlength = attributesMaxLength.nodeValue;
    }
  }

  @HostListener('click', ['$event.target'])

  onClick(btn: HTMLElement) {
    btn.setAttribute('maxlength', this.maxlength)
  }
}
```

* 政儀建議，可以在InputLengthDirective掛個 `@Input` 就可以代替maxLength

==input-length.ts== 調整成有@Input的
```typescript=
import { Directive, HostListener, Input } from '@angular/core';
@Directive({
  selector: '[input-length]'
})
export class InputLengthDirective {
  @Input('input-length') maxLength: string;

  constructor() {
  }

  @HostListener('click', ['$event.target'])

  onClick(inputElement: HTMLElement) {
    inputElement.setAttribute('maxlength', this.maxLength)
  }
}
```

maxLength
```htmlmixed
<mbsc-textarea maxLength="200"></mbsc-textarea>
```
input-length
```htmlmixed
<mbsc-textarea input-length="200"></mbsc-textarea>
```

## 事情公告
### 📢無事情公告