Componenti di Dependency Injection per AngularJS
โก Riepilogo intelligente
In AngularJS, l'iniezione delle dipendenze fornisce ai componenti gli oggetti da cui dipendono, anzichรฉ consentire loro di crearli autonomamente. Pertanto, i controller ricevono servizi come $http dall'iniettore del framework in fase di esecuzione.
Cos'รจ l'iniezione di dipendenza in AngularJS?
Iniezione di dipendenza in AngularJS รจ un modello di progettazione software che implementa l'inversione del controllo per risolvere le dipendenze. Decide come i componenti mantengono le loro dipendenze. Puรฒ essere utilizzato durante la definizione dei componenti o fornendo blocchi di esecuzione e configurazione del modulo. Consente di rendere i componenti riutilizzabili, testabili e manutenibili.
Inversione di controllo: Significa che gli oggetti non creano altri oggetti su cui fanno affidamento per svolgere il loro lavoro. Invece, ottengono questi oggetti da una fonte esterna. Ciรฒ costituisce la base di AngularJS Dependency Injection in cui se un oggetto dipende da un altro; l'oggetto primario non si assume la responsabilitร di creare l'oggetto dipendente e quindi di utilizzarne i metodi. Invece, una fonte esterna (che in AngularJS รจ il framework AngularJS stesso) crea l'oggetto dipendente e lo fornisce all'oggetto sorgente per un ulteriore utilizzo.
โ ๏ธ Nota sulla versione: Il supporto per AngularJS รจ terminato a gennaio 2022., senza patch di sicurezza. Angular moderno inietta tramite provider @Injectable e iniettare()Il codice seguente rimane storico.
Quindi capiamo prima cos'รจ una dipendenza.
Il diagramma sopra mostra un semplice esempio di iniezione di dipendenze AngularJS di un rituale quotidiano nella programmazione di database.
- La casella 'Modello' raffigura la "classe Modello" che normalmente viene creata per interagire con il database. Quindi ora il database รจ una dipendenza per il funzionamento della "classe Modello".
- Mediante l'inserimento delle dipendenze, creiamo un servizio per acquisire tutte le informazioni dal database e inserirle nella classe del modello.
Nella parte restante di questo tutorial, esamineremo piรน a fondo l'iniezione di dipendenza e come questa viene realizzata in AngularJS.
Quale componente puรฒ essere iniettato come dipendenza in AngularJS?
In AngularJS, le dipendenze vengono iniettate utilizzando un "metodo factory iniettabile" o una "funzione costruttore".
A questi componenti possono essere aggiunti componenti โservizioโ e โvaloreโ come dipendenze. Lo abbiamo visto in un argomento precedente con il servizio $http.
Un AngularJS modulo Registra oggetti iniettabili attraverso cinque ricette.
| ricette | Ciรฒ che registra |
|---|---|
| APPREZZIAMO | Un oggetto pronto, invisibile ai blocchi di configurazione. |
| fabbrica | Una funzione il cui valore di ritorno viene iniettato |
| INSTALLAZIONE | Un costruttore istanziato una volta con nuovo |
| fornitore | Una ricetta configurabile che espone $get |
| costante | Un valore fisso leggibile nei blocchi di configurazione |
Abbiamo giร visto che il servizio $http puรฒ essere utilizzato all'interno di AngularJS per ottenere dati da un file MySQL o MS SQL Database del server tramite a PHP applicazione web.
Il servizio $http viene normalmente definito dall'interno del controller nel modo seguente.
sampleApp.controller ('AngularJSController', function ($scope, $http)
Ora, quando il servizio $http รจ definito nel controller come mostrato sopra. Ciรฒ significa che il controller ora ha una dipendenza dal servizio $http.
Quindi, quando il codice sopra riportato viene eseguito, AngularJS eseguirร i seguenti passaggi:
- Controlla se รจ stata creata un'istanza del โservizio $httpโ. Poichรฉ il nostro "controllore" dipende ora dal "servizio $http", un oggetto di questo servizio deve essere reso disponibile al nostro controllore.
- Se AngularJS scopre che il servizio $http non รจ istanziato, AngularJS utilizza la funzione 'factory' per costruire un oggetto $http.
- L'iniettore all'interno di AngularJS fornisce quindi un'istanza del servizio $http al nostro controller per l'ulteriore elaborazione.
Forme di annotazione: Annotazione implicita legge i nomi dei parametri, quindi la minimizzazione lo interrompe. La notazione array inline e $inject sopravvivono; ng-strict-di su ng-app rifiuta l'annotazione implicita.
Ora che la dipendenza รจ stata inserita nel nostro controller, possiamo richiamare le funzioni necessarie all'interno del servizio $http per l'ulteriore elaborazione.
Esempio di inserimento delle dipendenze
In questo esempio impareremo come utilizzare l'iniezione di dipendenza in AngularJS.
L'inserimento delle dipendenze puรฒ essere implementato in 2 modi
- Uno รจ attraverso la โComponente Valoreโ
- Un altro รจ attraverso un โServizioโ
Diamo un'occhiata all'implementazione di entrambi i modi in modo piรน dettagliato.
1) Componente di valore
Questo concetto si basa sulla creazione di un semplice JavaCopione oggetto e passarlo al controller per l'ulteriore elaborazione.
Questo viene implementato utilizzando i due passaggi seguenti
Passo 1) Creare un JavaCrea un oggetto script utilizzando il componente value e collegalo al tuo modulo AngularJS principale.
Il componente valore assume due parametri; uno รจ la chiave e l'altro รจ il valore del JavaOggetto script che viene creato.
Passo 2) Accedi al JavaOggetto script dal Controller AngularJS
<! 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>
Il codice sopra riportato esegue i passaggi seguenti
-
sampleApp.value("TutorialID", 5);La funzione value del modulo AngularJS viene utilizzata per creare una coppia chiave-valore denominata "TutorialID" con il valore "5".
-
sampleApp.controller('AngularJSController', function ($scope,TutorialID)
La variabile TutorialID diventa ora accessibile al controller come parametro di funzione.
-
$scope.ID =TutorialID;
Il valore di TutorialID che รจ 5, viene ora assegnato a un'altra variabile chiamata ID nel $scope oggetto. Questo viene fatto affinchรฉ il valore 5 possa essere passato dal controller alla vista.
-
{{ID}}Il parametro ID viene visualizzato nella vista come espressione. Quindi l'output di "5" verrร visualizzato sulla pagina.
Quando viene eseguito il codice sopra, l'output verrร mostrato come di seguito
2) Servizio
Il servizio รจ definito come singleton JavaOggetto script costituito da un set di funzioni che si desidera esporre e iniettare nel controller.
Ad esempio, โ$httpโ รจ un servizio in AngularJS che, se iniettato nei controller, fornisce le funzioni necessarie di
( get() , query() , save() , rimuovi(), delete() ).
Queste funzioni possono quindi essere richiamate di conseguenza dal controller.
Diamo un'occhiata a un semplice esempio di come puoi creare il tuo servizio. Creeremo un semplice servizio di addizione che aggiunge due numeri.
<! 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>
Nell'esempio sopra riportato vengono eseguiti i seguenti passaggi
-
mainApp.service('AdditionService', function()
Qui stiamo creando un nuovo servizio chiamato 'AdditionService' utilizzando il parametro service del nostro modulo AngularJS principale.
-
this.ADDITION = function(a,b)
Qui stiamo creando una nuova funzione chiamata ADDITION all'interno del nostro servizio. Ciรฒ significa che quando AngularJS istanzia il nostro AdditionService all'interno del controller, saremo in grado di accedere alla funzione 'ADDITION'. In questa definizione di funzione, stiamo dicendo che questa funzione accetta due parametri, a e b.
-
return a+b;Qui definiamo il corpo della nostra funzione ADDITION, che semplicemente somma i parametri e restituisce il valore risultante.
-
mainApp.controller('DemoController', function($scope, AdditionService)
Questo รจ il passaggio principale che prevede l'iniezione delle dipendenze. Nella definizione del nostro controller, ora facciamo riferimento al nostro servizio 'AdditionService'. Quando AngularJS lo rileva, creerร un'istanza di un oggetto di tipo 'AdditionService'.
-
$scope.result = AdditionService.ADDITION(5,6);
Stiamo ora accedendo alla funzione 'ADDITION' definita nel nostro servizio e la stiamo assegnando all'oggetto $scope del controller.
Questo รจ quindi un semplice esempio di come possiamo definire il nostro servizio e iniettare la funzionalitร di quel servizio all'interno del nostro controller.


