แม้ว่า Angular จะให้บริการที่มีประโยชน์มากมายในแอปพลิเคชันพิเศษบางอย่างเราจะพบว่ามีประโยชน์ในการเขียนบริการที่กำหนดเอง หากเราต้องการทำสิ่งนี้ก่อนอื่นเราต้องลงทะเบียนวิธีการให้บริการในโรงงานในโมดูลซึ่งสามารถส่งผ่านโมดูลโดยตรง API (http://docs.angularjs.org/api/angular.module) หรือผ่านการกำหนดค่า API
บริการเชิงมุมทั้งหมดมีส่วนร่วมใน DI (//www.vevb.com/article/91775.htm) คุณสามารถลงทะเบียนตัวเองด้วยชื่อ (ID) ในระบบ DI เชิงมุม (หัวฉีด) หรือประกาศการพึ่งพาบริการที่มีอยู่ในวิธีการโรงงานอื่น
1. บริการลงทะเบียน
ในการลงทะเบียนบริการเราต้องมีโมดูลและทำให้เซิร์ฟเวอร์นี้เป็นส่วนหนึ่งของโมดูลนี้ จากนั้นเราสามารถลงทะเบียนบริการผ่านโมดูล API หรือในฟังก์ชั่นการกำหนดค่าโมดูล รหัสหลอกต่อไปนี้จะแสดงวิธีการลงทะเบียนทั้งสองนี้
ใช้ Angular.Module API:
var mymodule = angular.module ('mymodule', []); mymodule.factory ('serviceId', ฟังก์ชั่น () {var someservice; // วิธีการของโรงงาน, สร้าง someservice return someservice;});ใช้บริการ $ PRIVES:
Angular.module ('mymodule', [], ฟังก์ชั่น ($ ให้) {$ prost.factory ('serviceId', ฟังก์ชั่น () {var someservice; // วิธีการของโรงงาน, สร้าง someservice return someservice;});});โปรดทราบว่าเราไม่จำเป็นต้องลงทะเบียนอินสแตนซ์บริการแทนวิธีการโรงงานจะถูกสร้างอินสแตนซ์เมื่อมีการเรียก
2. การพึ่งพา
บริการไม่เพียง แต่ขึ้นอยู่กับ แต่ยังมีการพึ่งพาของตัวเอง การพึ่งพาสามารถระบุได้ในพารามิเตอร์ของวิธีโรงงาน อ่าน (//www.vevb.com/article/91775.htm) เพิ่มเติมเกี่ยวกับ DI ใน Angular การใช้แท็กอาร์เรย์และแอตทริบิวต์ $ inject เพื่อให้การประกาศ DI รัดกุมมากขึ้น (อ่านเพิ่มเติมเกี่ยวกับ DI ใน Angular และการใช้สัญกรณ์อาเรย์และทรัพย์สิน $ inject เพื่อให้คำอธิบายประกอบ DI minification-profe …)
นี่คือตัวอย่างบริการที่ง่ายมาก บริการนี้ขึ้นอยู่กับบริการ $ หน้าต่าง (ผ่านพารามิเตอร์วิธีการโรงงาน) และมีเพียงวิธีเดียวเท่านั้น บริการนี้จัดเก็บการแจ้งเตือนทั้งหมดหลังจากที่สามบริการนี้จะแสดงการแจ้งเตือนทั้งหมดผ่าน window.alert
<! doctype html> <html lang = "zh-cn" ng-app = "mainapp"> <head> <meta charset = "utf-8"> <title> บริการ </title> </head> <body> <div ng-controller = "myController" ng-click = "savemsg ()"> บันทึก msg </button> <ul> <li ng-repeat = "msg ใน msgs"> {{msg}} </li> </ul> </div> <script Src = "../ angular-1.0.1.js Angular.Module ("MainApp", [], ฟังก์ชั่น ($ prost) {$ proty.factory ("แจ้งเตือน", ["$ window", "$ timeout", ฟังก์ชั่น (ชนะ, หมดเวลา) {var msgs = []; ฟังก์ชั่นการส่งคืน (msg) {msgs.push (msg); ถ้า (msgs.length == 3) win.alert (msgs.oin ("/n")); app.controller ("myController", ฟังก์ชั่น ($ scope, แจ้งเตือน) {$ scope.msgs = []; $ scope.savemsg = function () {this.msgs.push (this.msg); แจ้ง (this.msg); this.msg = "";};});3. บริการเชิงมุมอินสแตนซ์
บริการทั้งหมดใน Angular มีการสร้างอินสแตนซ์อย่างเกียจคร้าน ซึ่งหมายความว่าบริการจะถูกสร้างขึ้นเฉพาะเมื่อบริการอินสแตนซ์อื่น ๆ หรือส่วนประกอบแอปพลิเคชันที่ขึ้นอยู่กับมันขึ้นอยู่กับ กล่าวอีกนัยหนึ่ง Angular จะไม่สร้างอินสแตนซ์ให้บริการจนกว่าบริการจะถูกร้องขอโดยตรงหรือโดยอ้อม
4. บริการเป็นซิงเกิลตัน
ในที่สุดเราต้องตระหนักว่าบริการเชิงมุมทั้งหมดเป็นแอปพลิเคชันซิงเกิลตัน ซึ่งหมายความว่าแต่ละหัวฉีดมีและเพียงหนึ่งอินสแตนซ์ของบริการที่กำหนด เนื่องจาก Angular น่ารำคาญอย่างยิ่งที่จะทำลายสถานะทั่วโลกจึงเป็นไปได้ที่จะสร้างหัวฉีดหลายตัวเพื่อให้แต่ละคนมีอินสแตนซ์ของบริการที่ระบุ ยกเว้นความต้องการที่แข็งแกร่งในการทดสอบโดยทั่วไปมีความต้องการเพียงเล็กน้อย
ข้างต้นคือข้อมูลเกี่ยวกับบริการเชิงมุม เราจะยังคงเพิ่มข้อมูลที่เกี่ยวข้องในอนาคต ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!