สรุป Angular Meetup เดือนมีนาคม 2561
Event พบปะและแลกเปลี่ยนเรื่อง Angular
Typescript ในเวอร์ชั่น 2.7 มีอะไรมาบ้างน๊าา
เราจะหยิบสิ่งที่น่าสนใจมาพูดถึงแค่บางส่วนอย่างเช่น
— Constant-named properties (คุณสมบัติของค่าคงที่)
สามารถใช้ Symbol ได้แล้ว ตัวอย่างเช่น
// Lib
export const SERIALIZE = Symbol("serialize-method-key");
export interface Serializable {
[SERIALIZE](obj: {}): string;
}_______________________________________________________// Consumer หรือตัวอย่างการนำไปใช้
import { SERIALIZE, Serializable } from "lib";
class JSONSerializableItem implements Serializable {
[SERIALIZE](obj: {}) {
return JSON.stringify(obj);
}
}
นอกจากนี้ยังสามารถใช้
constant เป็น key ใน object ได้
const Foo = "Foo";
const Bar = "Bar";// การเรียกใช้ constant name -> [constant name] -> [Foo]let x = {
[Foo]: 100,
[Bar]: "hello",
};
let a = x[Foo]; // has type 'number'
let b = x[Bar]; // has type 'string'// ==> จะได้ว่า a มีประเภทเป็น'ตัวเลข' และ b มีประเภทเป็น'สตริง'
ผลลัพธ์เมื่อลอง Transpile แล้ว Run console
Important!! Symbol มาใหม่ใน ES6 เพราะฉนั้นจะ support ใน browser ใหม่ๆ
ลองเช็คได้จากเว็บนี้: http://kangax.github.io/compat-table/es6
— Strict Class Initialization(มีการเข้มงวดเรื่องการกำหนดค่าเริ่มต้น)
เพิ่มคำสั่งเมื่อ transpile การเรียกใช้งาน
--strictPropertyInitialization// ==> จะทำการตรวจสอบเพื่อให้แน่ใจว่าเราได้กำหนดค่าเริ่มต้นใน constructor() หรือยัง// ตัวอย่างเช่นclass C {
foo: number;
bar = "hello";
baz: boolean;
// ~~~
constructor() {
this.foo = 42;
}
}// Error!! เพราะว่ายังไม่ได้กำหนดค่าเริ่มต้นให้กับตัวแปร baz ใน constructor()
แต่ถ้าเราตั้งใจที่จะไม่กำหนดค่าเริ่มต้นให้กับตัวแปร baz หรือคิดว่าเมื่อนำไปใช้แล้วจะมีค่าแน่นอน เราก็สามารถเลี่ยงการตรวจสอบได้โดยใช้เครื่องหมาย !
class C {
foo: number;
bar = "hello";
baz!: boolean; constructor() {
this.foo = 42;
}
}// Pass
อ่านเพิ่มเติมได้ที่: #strict-class-initialization
อ้างอิง: TypeScript#typescript-27
Custom Reuse Strategy คืออะไรน๊าา
จริงๆ แล้วมันอยู่ในเรื่องของการทำ Component Reuse Strategy
>> มันก็คือการนำ component ที่เคยสร้างขึ้นมาแล้วนำกลับมาใช้ใหม่ได้นั่นเอง
ตัวอย่างเช่น
เวลาที่เรา search แล้วได้ข้อมูลมาจาก api แล้ว render ใส่ grid เมื่อเรากดดู detail แล้ว back กลับมาหน้า search อีกรอบ มันจะไม่ยิง api ซ้ำเพื่อไปเอาข้อมูลมาใหม่
แต่!! มันจะใช้ข้อมูลเดิมที่เคย search ไว้แล้วนั่นเอง
**สมมติว่า ตอนนี้ข้อมูลใน database ของเรามี 10 rows.[1] domain.com/users>> ข้อมูลใน grid มี users 10 rows.[2] domain.com/users/5/detail>> ดูข้อมูล users id ที่ 5**สมมติว่า ตอนนี้ข้อมูลใน database ของเรามี 20 rows. แล้ว[3] กดปุ่ม back > navigate to > domain.com/users>> ข้อมูลใน grid มี users 10 rows. เหมือนเดิมก็คือการนำ component เดิมที่เคยสร้างแล้วนำกลับมาใช้อีกครั้งนั่นเอง
ตัวอย่างโค้ด: https://github.com/tumit/reusable-strategy-demo
paramsInheritanceStrategy ประโยชน์ของมัน !?
ก็คือปกติเมื่อเราต้องการดึงค่าจาก params จาก url เช่น
domain.com/users/5/detailid: Observable<string>;constructor(private route: ActivatedRoute) { }ngOnInit() { this.id = this.route.parent.paramMap.pipe((
map((params) => {
return params.get('id');
})
));
}
// Result: id => 5แล้วถ้ามี Params เพิ่มอีกหล่ะเช่นdomain.com/users/5/detail/6/sub/6
this.route.parent.parent.parent.....บลาๆ มันก็ไม่ใช่เรื่อง
จึงมีเรื่องของ paramsInheritanceStrategy เข้ามาช่วยในเรื่องพวกนี้
วิธีใช้งานก็ไม่ยากนะ
ในหน้า app.module.ts ในส่วนของ Router ก็ตั้งค่าเพิ่มเติม ดังนี้
static forRoot(routes: Routes, config?: ExtraOptions);RouterModule.forRoot([{path}], {
paramsInheritanceStrategy: 'always'
});// การใช้งานที่ componentid: Observable<string>;constructor(private route: ActivatedRoute) { }ngOnInit() { /**
เปลี่ยนจาก
this.route.parent.paramMap.pipe
เป็น
this.route.paramMap.pipe
**/
// ตัวอย่างเต็มรูปแบบ
this.id = this.route.paramMap.pipe(
map((params) => {
return params.get('id');
})
);
}ทีนี้เราก็จะได้ค่าของ id ไปใช้ได้เลย
หากมี params อื่นๆ เพิ่มเติม ก็สามารถประยุกต์จาก จุดๆ นี้ได้เลยเช่นกัน
ศึกษาเพิ่มเติมได้จาก: https://angular.io/api/router/ExtraOptions
ทดสอบโปรแกรม: https://angular-jrgnnz.stackblitz.io
ตัวอย่างโค้ด: https://stackblitz.com/edit/angular-jrgnnz
สุดท้ายและท้ายสุดพระเอกของเราก็คืออออออออออ……..
Angular ในเวอร์ชั่น 6.0.0 มีอะไรน่าว้าวๆ บ้าง^^
— New Render Engine: ngIvy
ngIvy จริงๆ แล้วก็คือ Renderer ตัวใหม่นั้นเอง หรือเรียกว่า renderer3
“ The render engine for Angular version 5.x is renderer2. ngIvy is renderer3”
ข้อดีของมันก็คือการแสดงผลที่รวดเร็วและไฟล์ที่ได้มาเมื่อ Build ทาง angular เค้าเคลมมาว่า มีขนาดที่เล็กมากกกกกกกกกกกกกก ซึ่งเมื่อเทียบกับเวอร์ชั่นก่อนหน้า
“Rob Wormald spoke” ได้พูดและสาธิตใน “Angular Mountain View slash Modern Web meetup in February of 2018” ว่าเมื่อสร้าง app ที่แสดงคำว่า “hello world” หลังจากที่ทำการ bundle เรียบร้อยแล้ว มีขนาดเพียงแค่ 3.2 kb.(kilobyte)
ซึ่งถือว่ามีขนาดที่เล็กมาก ถือเป็นเรื่องที่ตื่นเต้นและน่าสนใจอย่างมาก
หรือจะลองเล่นได้ที่ ลิ้งค์นี้ >> https://ng-ivy-demo.firebaseapp.com
ngivy ถือว่าเป็นเสียงตอบที่ดี ถ้าเราได้ใช้มันในอนาคตที่จะมีถึง^^
ngivy เป็น new backwards-compatible ซึ่งมุ่งเน้นไปที่การปรับปรุงความเร็ว ลดขนาดไฟล์และได้ความยืดหยุ่นที่เพิ่มมากขึ้น
ปัจจุบัน ngivy ยังไม่สามารถใช้งานได้ แต่ถ้าเราอยากจะทดสอบ สามารถทดสอบผ่าน enableIvy: true
โดยศึกษาเพิ่มเติมได้จาก >> angularCompilerOptions
แต่ปัจจุบันก็ยังอะไรคำสั่งและการใช้งานบางอย่างที่ยังไม่ support อย่างเช่น
Annotations
Component Composition
Life Cycle Hooks
Template Syntax
@Query
Content Projection
Injection Features
Change Detection
Bootstrap API
I18N
______Ref
s
อ้างอิงจาก : https://github.com/angular/angular/issues/21706
— Angular Elements
เป็นการสร้าง Custom element ขึ้นมาใหม่เพื่อให้ app อื่นๆ ที่ไม่ใช่ angular สามารถทำงานร่วมกันได้
ตัวอย่างเช่น
สังเกตุได้ว่าเมื่อเราสร้างด้วย angular element สามารถนำไปใช้งานร่วมกับ vuejs หรือ javascript framework อื่นๆ ได้เช่นกัน
สามารถศึกษาเรียนรู้เพิ่มเติมได้ที่ : https://angularplaybook.com
และก็ขอขอบคุณ Speaker ของเราดังนี้
ปิดท้ายด้วยบรรยากาศในงานนิ๊ดๆ หน่อยๆ
และในโอกาสต่อๆไป Angular Commmunity ของเราจะเพิ่มมากยิ่งขึ้น :P
LIVE Event #Angular Dev what is Comming and Update Since
Video Credit: Ponglang Petrung
ขอขอบคุณที่อ่านเนื้อหาจบจน และหวังว่าเป็นบทความที่มีความรู้
สามารถพาท่านเรียนรู้ได้จนเข้าใจ
หากมีข้อผิดพลาดประการใดต้องขออภัยมา ณ ที่นี้ด้วยนะครับ
Webboard กระทู้-ถามตอบ > https://www.bamossza.com
Thank you so much.