
ตัวตกแต่งเมธอดไม่ใช่คุณสมบัติพิเศษของ Angular คุณสมบัตินี้มีอยู่ใน es6 เช่นกัน [คำแนะนำการสอนที่เกี่ยวข้อง: "บทช่วยสอนเชิงมุม"]
ใน es6 มัณฑนากร (มัณฑนากร) เป็นไวยากรณ์ที่เกี่ยวข้องกับคลาส (คลาส) ที่ใช้ในการใส่คำอธิบายประกอบหรือแก้ไขคลาสและวิธีการเรียน ในระหว่างการคอมไพล์ ไวยากรณ์ "@function name" มักจะอยู่หน้าคำจำกัดความของคลาสและเมธอดคลาส ตัวตกแต่งมีสองประเภท: ตัวตกแต่งคลาส และตัวตกแต่งเมธอดคลาส
ใน Angular มัณฑนากรที่พบมากที่สุดคือมัณฑนากรคลาส @Component และเรายังสามารถเพิ่มมัณฑนากรให้กับเมธอดได้:

มัณฑนากรเป็นฟังก์ชัน มัณฑนากรวิธีการสามารถใช้เพื่อตรวจสอบ แก้ไข หรือแทนที่คำจำกัดความของ
ได้กล่าวไว้ข้างต้น คำจำกัดความของวิธีการ ด้วยวิธีนี้ เราสามารถใช้การห่อหุ้มชั้นนี้ได้อย่างยืดหยุ่นซึ่งนำเราไปสู่การทำสิ่งต่างๆ มากมาย
วิธีที่พบบ่อยที่สุดคือการตรวจสอบ เราสามารถสรุปวิธีการผ่านเลเยอร์นี้เพื่อทำการตรวจสอบสิทธิ์แบบรวม ด้วยวิธีนี้ หากคุณต้องการเพิ่มการตรวจสอบสิทธิ์ให้กับวิธีการ คุณจะต้องเพิ่มตัวตกแต่งวิธีการนี้แทนการทำซ้ำเพื่อแทนที่ วิธีการตรวจสอบ
หรืออาจเป็นหน้าต่างป๊อปอัปแบบรวมหรือการประมวลผลพร้อมท์ สำหรับวิธีการต่างๆ มากมาย การประมวลผลพร้อมท์แบบรวมอาจดำเนินการหลังจากดำเนินการ เพื่อให้สามารถเพิ่มตัวตกแต่งวิธีการสำหรับการประมวลผลแบบครบวงจรได้
โดยรวมแล้ว จุดประสงค์ของเครื่องมือตกแต่งเมธอดคือการห่อหุ้มตรรกะแบบรวมของวิธีการบางอย่าง เพื่อให้สามารถนำมาใช้ซ้ำได้เมื่อจำเป็นในระหว่างการเรียกใช้เมธอดแต่ละครั้ง
วิธีการ มัณฑนากรส่วนใหญ่มีพารามิเตอร์อินพุตสาม
นำเข้า { ส่วนประกอบ, OnInit } จาก '@ เชิงมุม/core';
บันทึกฟังก์ชัน (เป้าหมาย: ใด ๆ คีย์: สตริง descriptor: ใด ๆ ) {
console.log(เป้าหมาย);
console.log(คีย์);
console.log(คำอธิบาย);
-
@ส่วนประกอบ({
ตัวเลือก: 'app-fn-test',
templateUrl: './fn-test.component.html',
styleUrls: ['./fn-test.component.scss']
-
คลาสส่งออก FnTestComponent ใช้ OnInit {
ตัวสร้าง () { }
ngOnInit(): เป็นโมฆะ {
นี่.จ่าย(2,3)
-
@บันทึก
จ่าย(ราคา: หมายเลข, นับ: หมายเลข): หมายเลข {
ราคาไปกลับ*จำนวน
-
- 
และการตกแต่งวิธีการสามารถแบ่งย่อยได้เป็นสองประเภท ประเภทแรกคือตัวตกแต่งวิธีการที่ส่งผ่านพารามิเตอร์ และอีกประเภทหนึ่งคือตัวตกแต่งวิธีการที่ไม่ผ่านพารามิเตอร์
มีแอตทริบิวต์ descriptor.value ในตัวอธิบายคุณสมบัติซึ่งเป็นวิธีการตกแต่ง โดยวิธีนี้ เราสามารถรับค่าที่ส่งผ่านในพารามิเตอร์และผลลัพธ์การดำเนินการของฟังก์ชัน:
function log(target: any, key: สตริง, คำอธิบาย: ใด ๆ) {
ให้วิธี = descriptor.value;
descriptor.value = ฟังก์ชั่น (...args: ใด ๆ []) {
ผลลัพธ์ var: any = method.apply(this, args);
console.log(`method:${key}, args:${JSON.stringify(args)}, return:${result}`);
ส่งคืนผลลัพธ์;
-
} ในกรณีนี้ของการส่งผ่านพารามิเตอร์ เราจำเป็นต้องตัดเลเยอร์อื่นออกไปนอกฟังก์ชันก่อนหน้า ฟังก์ชันภายนอกสามารถรับค่าที่ส่งผ่าน และฟังก์ชันที่ส่งคืนโดยเลเยอร์ด้านในจะเหมือนกับฟังก์ชันก่อนหน้าโดยไม่มีพารามิเตอร์ หากคุณต้องการใช้ฟังก์ชัน คุณสามารถรับพารามิเตอร์ได้ 3 ตัว:
บันทึกฟังก์ชัน (ตอนนี้เวลา: วันที่) {
console.log(ตอนนี้เวลา);
ฟังก์ชั่น return (เป้าหมาย: ใด ๆ , คีย์: สตริง, descriptor: ใด ๆ ) {
ให้วิธี = descriptor.value;
descriptor.value = ฟังก์ชั่น (...args: ใด ๆ []) {
ผลลัพธ์ var: any = method.apply(this, args);
console.log(`method:${key}, args:${JSON.stringify(args)}, return:${result}`);
ส่งคืนผลลัพธ์;
-
-
-
คลาสส่งออก FnTestComponent ใช้ OnInit {
-
@log(วันที่ใหม่())
pay(ราคา: number, count:number): number { return Price*count
-
-
// วันอังคารที่ 07 มิ.ย. 2565 18:48:22 GMT+0800 (เวลามาตรฐานประเทศจีน)
// fn-test.component.ts:9 method: pay, args: [2,3], return: 6 ด้วยเครื่องมือตกแต่งเมธอด เราสามารถดำเนินการประมวลผลเชิงตรรกะแบบรวมศูนย์กับเมธอดภายในคลาสได้ ซึ่งสามารถลดสิ่งที่ไม่จำเป็นได้มาก การทำซ้ำโค้ดยังทำให้วิธีการง่ายขึ้นและลดต้นทุนในการพัฒนาขั้นที่สองในภายหลังได้อย่างมาก