การฉีดการพึ่งพา AngularJS: ส่วนประกอบใดที่ถูกฉีด

การฉีดพึ่งพาใน AngularJS คืออะไร?

การฉีดพึ่งพา ใน AngularJS เป็นรูปแบบการออกแบบซอฟต์แวร์ที่ใช้การกลับกันของการควบคุมเพื่อแก้ไขการขึ้นต่อกัน จะตัดสินใจว่าส่วนประกอบต่างๆ ยึดถือการพึ่งพาของตนอย่างไร สามารถใช้ในขณะที่กำหนดส่วนประกอบหรือจัดทำบล็อกการรันและกำหนดค่าของโมดูล ช่วยให้คุณสามารถทำให้ส่วนประกอบต่างๆ สามารถนำมาใช้ใหม่ ทดสอบได้ และบำรุงรักษาได้

การผกผันของการควบคุม: หมายความว่าวัตถุไม่ได้สร้างวัตถุอื่นที่พวกเขาต้องพึ่งพาในการทำงาน แต่พวกเขาได้รับวัตถุเหล่านี้จากแหล่งภายนอกแทน นี่เป็นพื้นฐานของ AngularJS Dependency Injection โดยที่หากวัตถุหนึ่งขึ้นอยู่กับอีกวัตถุหนึ่ง วัตถุหลักไม่รับผิดชอบในการสร้างวัตถุที่ขึ้นต่อกันแล้วใช้วิธีการของมัน แหล่งที่มาภายนอก (ซึ่งใน AngularJS คือเฟรมเวิร์ก AngularJS เอง) จะสร้างวัตถุที่ขึ้นต่อกันและมอบให้กับวัตถุต้นทางเพื่อการใช้งานต่อไป

ก่อนอื่นเรามาทำความเข้าใจก่อนว่าการพึ่งพาคืออะไร

การฉีดพึ่งพาใน AngularJS

แผนภาพด้านบนแสดงตัวอย่างการฉีดการพึ่งพา AngularJS แบบง่าย ๆ ของกิจวัตรประจำวันในการเขียนโปรแกรมฐานข้อมูล

  • กล่อง 'Model' แสดงถึง "คลาส Model" ซึ่งปกติจะสร้างขึ้นเพื่อโต้ตอบกับฐานข้อมูล ดังนั้นตอนนี้ฐานข้อมูลจึงกลายเป็นสิ่งที่ต้องมีเพื่อให้ "คลาส Model" ทำงานได้
  • ด้วยการฉีดขึ้นต่อกัน เราสร้างบริการเพื่อดึงข้อมูลทั้งหมดจากฐานข้อมูลและเข้าสู่คลาสโมเดล

ในส่วนที่เหลือของบทช่วยสอนนี้ เราจะดูเพิ่มเติมเกี่ยวกับ dependency insert และวิธีทำให้สิ่งนี้สำเร็จใน AngularJS

องค์ประกอบใดที่สามารถฉีดเป็นการพึ่งพาใน AngularJS

ใน Angular.JS การพึ่งพาจะถูกฉีดโดยใช้ "วิธีโรงงานแบบฉีด" หรือ "ฟังก์ชันตัวสร้าง"

ส่วนประกอบเหล่านี้สามารถแทรกด้วยส่วนประกอบ "บริการ" และ "คุณค่า" เป็นการพึ่งพาได้ เราได้เห็นสิ่งนี้ในหัวข้อก่อนหน้านี้กับบริการ $http

เราได้เห็นแล้วว่าบริการ $http สามารถใช้ภายใน AngularJS เพื่อรับข้อมูลจาก MySQL หรือ MS SQL ฐานข้อมูลเซิร์ฟเวอร์ผ่าน PHP โปรแกรมประยุกต์บนเว็บ

โดยปกติบริการ $http จะถูกกำหนดจากภายในตัวควบคุมในลักษณะต่อไปนี้

sampleApp.controller ('AngularJSController', function ($scope, $http)

ตอนนี้เมื่อมีการกำหนดบริการ $http ในคอนโทรลเลอร์ดังที่แสดงด้านบน หมายความว่าตอนนี้คอนโทรลเลอร์ต้องพึ่งพาบริการ $http

ดังนั้นเมื่อมีการดำเนินการโค้ดข้างต้น AngularJS จะดำเนินการตามขั้นตอนต่อไปนี้

  1. ตรวจสอบว่ามีการสร้างอินสแตนซ์ “$http service” แล้วหรือยัง เนื่องจากตอนนี้ "ตัวควบคุม" ของเราขึ้นอยู่กับ "บริการ $http" วัตถุของบริการนี้จึงต้องเปิดให้ผู้ควบคุมของเราใช้งานได้
  2. หาก AngularJS พบว่าบริการ $http ไม่ได้สร้างอินสแตนซ์ AngularJS จะใช้ฟังก์ชัน 'factory' เพื่อสร้างวัตถุ $http
  3. injector ภายใน Angular.JS จะจัดเตรียมอินสแตนซ์ของบริการ $http ให้กับคอนโทรลเลอร์ของเราเพื่อการประมวลผลต่อไป

เมื่อการพึ่งพาถูกแทรกเข้าไปในคอนโทรลเลอร์ของเราแล้ว ตอนนี้เราสามารถเรียกใช้ฟังก์ชันที่จำเป็นภายในบริการ $http เพื่อการประมวลผลต่อไปได้

ตัวอย่างของการพึ่งพาการฉีด

ในตัวอย่างนี้ เราจะเรียนรู้วิธีใช้ dependencyjection ใน AngularJS

การฉีดพึ่งพาสามารถทำได้ 2 วิธี

  1. ประการหนึ่งคือผ่าน “องค์ประกอบคุณค่า”
  2. อีกประการหนึ่งคือผ่าน "บริการ"

มาดูการใช้งานทั้งสองวิธีโดยละเอียด

1) องค์ประกอบคุณค่า

แนวคิดนี้มีพื้นฐานมาจากความเป็นจริงของการสร้างความเรียบง่าย Javaต้นฉบับ วัตถุและส่งต่อไปยังตัวควบคุมเพื่อประมวลผลต่อไป

ดำเนินการโดยใช้สองขั้นตอนด้านล่าง

ขั้นตอน 1) สร้าง Javaวัตถุสคริปต์โดยใช้ส่วนประกอบค่าและแนบไปกับโมดูล AngularJS.JS หลักของคุณ

องค์ประกอบค่าใช้พารามิเตอร์สองตัว อันหนึ่งคือกุญแจสำคัญ และอีกอันคือค่าของออบเจ็กต์จาวาสคริปต์ที่สร้างขึ้น

ขั้นตอน 2) เข้า Javaวัตถุสคริปต์จาก ตัวควบคุม Angular.JS

<! DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Event Registration</title>

</head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<body ng-app="sampleApp">

<div ng-controller="AngularJSController">
    <h3> Guru99 Global Event</h3>
    {{ID}}
</div>
<script>

    var sampleApp = angular.module('sampleApp',[]);
    sampleApp.value("TutorialID", 5);
    sampleApp.controller('AngularJSController', function($scope,TutorialID) {
        $scope.ID =TutorialID;
    });

</script>
</body>
</html>

ในตัวอย่างโค้ดข้างต้น กำลังดำเนินการขั้นตอนหลักด้านล่างนี้

  1. sampleApp.value("TutorialID", 5);

ฟังก์ชันค่าของโมดูล Angular.JS JS กำลังถูกใช้เพื่อสร้างคู่คีย์-ค่าที่เรียกว่า "TutorialID" และค่าของ "5"

  1. sampleApp.controller('AngularJSController', function ($scope,TutorialID)

ขณะนี้ตัวแปร TutorialID สามารถเข้าถึงได้โดยคอนโทรลเลอร์ในฐานะพารามิเตอร์ฟังก์ชัน

  1.  $scope.ID =TutorialID;

ขณะนี้ค่าของ TutorialID ซึ่งก็คือ 5 กำลังถูกกำหนดให้กับตัวแปรอื่นที่เรียกว่า ID ในออบเจ็กต์ $scope สิ่งนี้กำลังดำเนินการเพื่อให้สามารถส่งผ่านค่า 5 จากคอนโทรลเลอร์ไปยังมุมมองได้

  1. {{ID}}

พารามิเตอร์ ID จะแสดงเป็นนิพจน์ในมุมมอง ดังนั้นผลลัพธ์ของ '5' จะแสดงบนเพจ

เมื่อรันโค้ดข้างต้นแล้ว จะได้ผลลัพธ์ดังนี้

องค์ประกอบค่าในการฉีดพึ่งพา

2) บริการ

บริการถูกกำหนดให้เป็นแบบซิงเกิลตัน Javaวัตถุสคริปต์ประกอบด้วยชุดฟังก์ชันที่คุณต้องการเปิดเผยและฉีดลงในตัวควบคุมของคุณ

ตัวอย่างเช่น “$http” เป็นบริการใน Angular.JS ซึ่งเมื่อฉีดเข้าไปในคอนโทรลเลอร์ของคุณจะมีฟังก์ชันที่จำเป็นของ

( get() , query() , บันทึก() , ลบ(), ลบ() )

จากนั้นคุณสามารถเรียกใช้ฟังก์ชันเหล่านี้ได้จากคอนโทรลเลอร์ของคุณตามลำดับ

มาดูตัวอย่างง่ายๆ ว่าคุณสามารถสร้างบริการของคุณเองได้อย่างไร เราจะสร้างบริการการบวกแบบง่ายๆ ซึ่งจะบวกเลขสองตัว

<! DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Event Registration</title>

</head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<body>
<h3> Guru99 Global Event</h3>

<div ng-app = "mainApp" ng-controller = "DemoController">
    <p>Result: {{result}}</p>
</div>
<script>
    var mainApp = angular.module("mainApp", []);

    mainApp.service('AdditionService', function(){
        this.ADDITION = function(a,b) {
            return a+b;
        }
    });

    mainApp.controller('DemoController', function($scope, AdditionService) {

            $scope.result = AdditionService.ADDITION(5,6);
    });
</script>

</body>
</html>

ในตัวอย่างข้างต้น ดำเนินการตามขั้นตอนต่อไปนี้

  1.  mainApp.service('AdditionService', function()

ที่นี่เรากำลังสร้างบริการใหม่ที่เรียกว่า 'AdditionService' โดยใช้พารามิเตอร์บริการของโมดูล AngularJS JS หลักของเรา

  1.  this.Addition = function(a,b)

ที่นี่เรากำลังสร้างฟังก์ชันใหม่ที่เรียกว่า Addition ภายในบริการของเรา ซึ่งหมายความว่าเมื่อ AngularJS สร้างอินสแตนซ์ AdditionService ของเราภายในคอนโทรลเลอร์ของเรา เราก็จะสามารถเข้าถึงฟังก์ชัน 'Addition' ได้ ในนิยามฟังก์ชันนี้ เรากำลังบอกว่าฟังก์ชันนี้ยอมรับพารามิเตอร์สองตัว คือ a และ b

  1.  return a+b;

ที่นี่ เรากำลังกำหนดเนื้อความของฟังก์ชัน Addition ซึ่งเพียงเพิ่มพารามิเตอร์และส่งกลับมูลค่าเพิ่ม

  1.  mainApp.controller('DemoController', function($scope, AdditionService)

นี่คือขั้นตอนหลักที่เกี่ยวข้องกับการฉีดการพึ่งพา ในคำจำกัดความของคอนโทรลเลอร์ ขณะนี้เรากำลังอ้างอิงถึงบริการ 'AdditionService' ของเรา เมื่อ AngularJS เห็นสิ่งนี้ มันจะสร้างอินสแตนซ์ของวัตถุประเภท 'AdditionService'

  1.  $scope.result = AdditionService.Addition(5,6);

ขณะนี้เรากำลังเข้าถึงฟังก์ชัน 'Addition' ซึ่งกำหนดไว้ในบริการของเราและกำหนดให้กับวัตถุ $scope ของคอนโทรลเลอร์

นี่คือตัวอย่างง่ายๆ ของวิธีที่เราสามารถกำหนดบริการของเราและแทรกฟังก์ชันการทำงานของบริการนั้นภายในตัวควบคุมของเรา

สรุป

  • การพึ่งพาการฉีดตามชื่อหมายถึงเป็นกระบวนการของการฉีดฟังก์ชันการทำงานที่ขึ้นต่อกันลงในโมดูล ณ รันไทม์
  • การใช้การพึ่งพาการฉีดช่วยให้มีโค้ดที่สามารถนำมาใช้ซ้ำได้มากขึ้น หากคุณมีฟังก์ชันการทำงานทั่วไปที่ใช้ในโมดูลแอปพลิเคชันหลายโมดูล วิธีที่ดีที่สุดคือการกำหนดบริการส่วนกลางด้วยฟังก์ชันนั้น จากนั้นจึงแทรกบริการนั้นเป็นการขึ้นต่อกันในโมดูลแอปพลิเคชันของคุณ
  • ค่าวัตถุของ AngularJS สามารถใช้เพื่อฉีดแบบง่ายๆ Javaวัตถุสคริปต์ในตัวควบคุมของคุณโดยใช้ $inject ใน AngularJS.
  • โมดูลบริการสามารถใช้เพื่อกำหนดบริการที่กำหนดเองของคุณซึ่งสามารถนำมาใช้ซ้ำได้ในโมดูล AngularJS หลายโมดูล