###### 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> ``` ## 事情公告 ### 📢無事情公告