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.

  • ๐Ÿ”˜ Definizione: L'inversione del controllo consente a un iniettore esterno di fornire ogni dipendenza necessaria a un componente.
  • โ˜‘๏ธ ricette: oggetti iniettabili relativi a valore, fabbrica, servizio, fornitore e registro costante.
  • โœ… Componente di valore: Una coppia chiave-valore raggiunge il controller come un semplice parametro di funzione.
  • ๐Ÿงช Servizio: Un oggetto singleton espone funzioni riutilizzabili che i controller iniettano tramite nome.
  • ๏ธ Annotazione: L'utilizzo di array inline o la notazione $inject consente di mantenere l'iniezione funzionante anche dopo la minimizzazione.
  • ๐Ÿ“Š Nota sulla versione: Il supporto per AngularJS รจ terminato a gennaio 2022; ora Angular effettua l'iniezione tramite il metodo inject().

Iniezione delle dipendenze in AngularJS: passaggio di un servizio a un controller tramite l'iniettore.

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.

Classe modello dipendente da un database, con un servizio iniettato per recuperare i dati

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:

  1. 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.
  2. Se AngularJS scopre che il servizio $http non รจ istanziato, AngularJS utilizza la funzione 'factory' per costruire un oggetto $http.
  3. 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

  1. Uno รจ attraverso la โ€œComponente Valoreโ€
  2. 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

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

    La funzione value del modulo AngularJS viene utilizzata per creare una coppia chiave-valore denominata "TutorialID" con il valore "5".

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

    La variabile TutorialID diventa ora accessibile al controller come parametro di funzione.

  3.  $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.

  4. {{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

Output del browser dell'esempio del componente valore che stampa il TutorialID iniettato di 5

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

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

    Qui stiamo creando un nuovo servizio chiamato 'AdditionService' utilizzando il parametro service del nostro modulo AngularJS principale.

  2.  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.

  3.  return a+b;

    Qui definiamo il corpo della nostra funzione ADDITION, che semplicemente somma i parametri e restituisce il valore risultante.

  4.  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'.

  5.  $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.

DOMANDE FREQUENTI

Il servizio istanzia il tuo costruttore una sola volta con `new`. La factory esegue la tua funzione e inietta qualsiasi cosa restituisca, quindi anche i tipi primitivi funzionano.

La costante raggiunge i blocchi di configurazione e resiste ai decoratori. Il valore viene registrato dopo i provider, quindi i blocchi di configurazione non possono vederlo.

Ogni applicazione dispone di un iniettore che risolve i nomi, restituisce le istanze tramite get ed esegue le funzioni con le relative dipendenze tramite invoke.

I minificatori rinominano i parametri con singole lettere, quindi l'iniettore cerca un provider chiamato a. L'annotazione esplicita preserva i nomi reali.

Registra il fornitore, elenca i suoi modulo nell'array delle dipendenze e controlla l'ortografia. Anche il codice minimizzato non annotato genera questo errore.

@Provider iniettabili piรน parametri del costruttore, o il iniettare() funzione all'interno degli inizializzatori di campo. Un iniettore gerarchico risolve ogni token.

Strumenti di apprendimento automatico trace ogni nome iniettato attraverso controllori e servizi, classificano l'accoppiamento e segnalano i fornitori a rischio. Gli ingegneri verificano i risultati.

Copilota GitHub emette array inline e annotazioni $inject su richiesta, e le esecuzioni agentiche scansionano intere cartelle. RevVisualizza le annotazioni generate.

Riassumi questo post con: