Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Template, scope e composizione di direttive

Una direttiva può essere il risultato della composizione di altre direttive: possiamo estendere direttive esistenti senza modificare il loro codice.
Una direttiva può essere il risultato della composizione di altre direttive: possiamo estendere direttive esistenti senza modificare il loro codice.
Link copiato negli appunti

Nell'esempio precedente abbiamo introdotto la definizione di una nuova direttiva che abbiamo chiamato my-select-city. Riprendiamone la definizione:

angular.module("myApp", [])
	.directive("mySelectCity", function() {
		return {
			restrict: "E",
			templateUrl: "/mySelectCityTemplate.html"
		};
	});

<script type="text/ng-template" id="/mySelectCityTemplate.html">
	<select ng-model="selectedItem">
		<option ng-repeat="citta in elencoCitta" value="citta.codice">{{citta.nome}}</option>
	</select>
</script>

Vi troviamo due importanti novità rispetto a quanto abbiamo visto finora sulle direttive.

La prima novità riguarda il fatto che abbiamo utilizzato delle direttive all'interno del markup della nostra direttiva: ng-model e ng-option. Questo vuol dire che una direttiva può essere il risultato della composizione di altre direttive, con conseguenze quindi incredibili sulle potenzialità di questo approccio: possiamo estendere e comporre direttive esistenti senza toccare il loro codice ed ottenendo componenti più vicini alle nostre esigenze.

La seconda novità riguarda l'uso di variabili e di espressioni Angular all'interno del markup. Sappiamo che in una view questi elementi fanno riferimento ad un modello di dati aggangiato allo scope del relativo controller, ma per le direttive non abbiamo parlato né di scope né di controller.

Lo scope a cui fanno riferimento le variabili e le espressioni utilizzate nel template di una direttiva è lo scope del controller la cui view contiene la direttiva. Nel nostro caso, quindi, se la nostra applicazione ha la seguente view:

<div ng-controller="myController">
	<my-select-city></my-select-city>
</div>

legata al seguente controller:

angular.module("myApp", [])
	.controller("myController", function($scope) {
		$scope.elencoCitta = [
			{codice: "RM", nome: "Roma"},
			{codice: "MI", nome: "Milano"},
			{codice: "NA", nome: "Napoli"},
			{codice: "PA", nome:"Palermo"}
		];
	});

le variabili e le espressioni Angular contenute nel template della direttiva my-select-city verranno risolte prendendo come riferimento lo scope del controller myController ottenendo il seguente risultato:

Ti consigliamo anche