AngularJS ของ module.constant
ไม่ได้กำหนดค่าคงที่ในความหมายมาตรฐาน
ในขณะที่มันยืนอยู่บนตัวมันเองเป็นกลไกการลงทะเบียนผู้ให้บริการ แต่เป็นที่เข้าใจกันดีที่สุดในบริบทของฟังก์ชันmodule.value
( $provide.value
) ที่เกี่ยวข้อง เอกสารอย่างเป็นทางการระบุกรณีการใช้อย่างชัดเจน:
ลงทะเบียนบริการที่มีมูลค่าด้วย $ injector เช่นสตริงตัวเลขอาร์เรย์วัตถุหรือฟังก์ชัน สิ่งนี้สั้นสำหรับการลงทะเบียนบริการโดยที่คุณสมบัติ $ get ของผู้ให้บริการเป็นฟังก์ชั่นจากโรงงานที่ไม่มีข้อโต้แย้งและคืนค่าบริการ นั่นหมายความว่ามันเป็นไปไม่ได้ที่จะฉีดบริการอื่น ๆ เข้าไปในบริการที่มีคุณค่า
เปรียบเทียบสิ่งนี้กับเอกสารสำหรับmodule.constant
( $provide.constant
) ซึ่งระบุกรณีการใช้อย่างชัดเจน (เน้นที่เหมือง):
ลงทะเบียนบริการแบบคงที่ด้วย $ injector เช่นสตริงตัวเลขอาร์เรย์วัตถุหรือฟังก์ชัน เช่นเดียวกับค่าคุณไม่สามารถฉีดบริการอื่น ๆ ให้คงที่ได้ แต่แตกต่างจากค่าคงที่สามารถฉีดเข้าไปในฟังก์ชั่นการตั้งค่าโมดูล (ดู angular.Module) และไม่สามารถแทนที่โดยมัณฑนากร
ดังนั้นconstant
ฟังก์ชั่นAngularJS ไม่ได้ให้ค่าคงที่ในความหมายที่เข้าใจกันโดยทั่วไปของคำในฟิลด์
ที่กล่าวว่าข้อ จำกัด ที่วางไว้บนวัตถุที่ให้ไว้พร้อมกับความพร้อมก่อนหน้านี้ผ่านทาง $ injector แสดงให้เห็นชัดเจนว่ามีการใช้ชื่อโดยการเปรียบเทียบ
หากคุณต้องการค่าคงที่ที่แท้จริงในแอปพลิเคชัน AngularJS คุณจะต้อง "ให้" หนึ่งวิธีเช่นเดียวกับที่คุณทำในโปรแกรม JavaScript ใด ๆ ซึ่งเป็น
export const π = 3.14159265;
ใน Angular 2 จะใช้เทคนิคเดียวกัน
แอปพลิเคชัน Angular 2 ไม่มีเฟสการกำหนดค่าในลักษณะเดียวกับแอปพลิเคชัน AngularJS นอกจากนี้ยังไม่มีกลไกมัณฑนากรบริการ ( AngularJS Decorator ) แต่นี่ก็ไม่น่าประหลาดใจเป็นพิเศษเนื่องจากความแตกต่างระหว่างกัน
ตัวอย่างของ
angular
.module('mainApp.config', [])
.constant('API_ENDPOINT', 'http://127.0.0.1:6666/api/');
โดยพลการและวางตัวเล็กน้อยเนื่องจาก$provide.constant
ใช้เพื่อระบุวัตถุที่เป็นค่าคงที่โดยบังเอิญ คุณอาจจะเขียนเช่นกัน
export const apiEndpoint = 'http://127.0.0.1:6666/api/';
สำหรับทั้งสามารถเปลี่ยนแปลง
ตอนนี้อาร์กิวเมนต์สำหรับความสามารถในการทดสอบการเยาะเย้ยค่าคงที่จะลดลงเพราะแท้จริงแล้วจะไม่เปลี่ยนแปลง
ไม่มีใครเยาะเย้ยπ
แน่นอนว่าความหมายเฉพาะของแอปพลิเคชันของคุณอาจเป็นที่จุดสิ้นสุดของคุณสามารถเปลี่ยนแปลงได้หรือ API ของคุณอาจมีกลไกการเฟลโอเวอร์ที่ไม่โปร่งใสดังนั้นจึงเหมาะสมสำหรับจุดสิ้นสุดของ API ที่จะเปลี่ยนแปลงภายใต้สถานการณ์บางอย่าง
แต่ในกรณีนั้นการระบุว่าเป็นการแสดงตัวอักษรสตริงของ URL เดียวกับconstant
ฟังก์ชันจะไม่ทำงาน
ข้อโต้แย้งที่ดีกว่าและน่าจะมีอีกหนึ่งเหตุผลที่สอดคล้องกับการมีอยู่ของ$provide.constant
ฟังก์ชันAngularJS คือเมื่อ AngularJS ถูกนำเสนอ JavaScript ไม่มีแนวคิดโมดูลมาตรฐาน ในกรณีนั้นจะใช้ globals เพื่อแบ่งปันค่าไม่แน่นอนหรือไม่เปลี่ยนรูปและการใช้ globals เป็นปัญหา
ที่กล่าวว่าการให้สิ่งนี้ผ่านกรอบเพิ่มการมีเพศสัมพันธ์กับกรอบที่ นอกจากนี้ยังผสมตรรกะเฉพาะเชิงมุมกับตรรกะที่จะทำงานในระบบอื่น ๆ
นี่ไม่ใช่การบอกว่ามันเป็นวิธีที่ผิดหรือเป็นอันตราย แต่โดยส่วนตัวถ้าฉันต้องการค่าคงที่ในแอปพลิเคชัน Angular 2 ฉันจะเขียน
export const π = 3.14159265;
เช่นเดียวกับที่ฉันเคยใช้ AngularJS
ยิ่งมีการเปลี่ยนแปลง ...
AppSettings
ระดับที่ควรจะเป็นนามธรรมและสมาชิกควรจะเป็นAPI_ENDPOINT
readonly