AngularJS - Direttive personalizzate
Le direttive personalizzate vengono utilizzate in AngularJS per estendere la funzionalità dell'HTML. Le direttive personalizzate vengono definite utilizzando la funzione "direttiva". Una direttiva personalizzata sostituisce semplicemente l'elemento per cui è attivata. L'applicazione AngularJS durante il bootstrap trova gli elementi corrispondenti ed esegue un'attività una tantum utilizzando il suo metodo compile () della direttiva personalizzata, quindi elabora l'elemento utilizzando il metodo link () della direttiva personalizzata in base all'ambito della direttiva. AngularJS fornisce supporto per creare direttive personalizzate per i seguenti tipi di elementi.
Element directives - La direttiva si attiva quando viene rilevato un elemento corrispondente.
Attribute - La direttiva si attiva quando viene rilevato un attributo corrispondente.
CSS - La direttiva si attiva quando si incontra uno stile CSS corrispondente.
Comment - La direttiva si attiva quando si incontra un commento corrispondente.
Comprensione della direttiva personalizzata
Definisci tag html personalizzati.
<student name = "Mahesh"></student><br/>
<student name = "Piyush"></student>
Definisci la direttiva personalizzata da gestire sopra i tag html personalizzati.
var mainApp = angular.module("mainApp", []);
//Create a directive, first parameter is the html element to be attached.
//We are attaching student html tag.
//This directive will be activated as soon as any student element is encountered in html
mainApp.directive('student', function() {
//define the directive object
var directive = {};
//restrict = E, signifies that directive is Element directive
directive.restrict = 'E';
//template replaces the complete element with its text.
directive.template = "Student: <b>{{student.name}}</b> ,
Roll No: <b>{{student.rollno}}</b>";
//scope is used to distinguish each student element based on criteria.
directive.scope = {
student : "=name"
}
//compile is called during application initialization. AngularJS calls
it once when html page is loaded.
directive.compile = function(element, attributes) {
element.css("border", "1px solid #cccccc");
//linkFunction is linked with each element with scope to get the element specific data.
var linkFunction = function($scope, element, attributes) {
element.html("Student: <b>"+$scope.student.name +"</b> ,
Roll No: <b>"+$scope.student.rollno+"</b><br/>");
element.css("background-color", "#ff00ff");
}
return linkFunction;
}
return directive;
});
Definire il controller per aggiornare l'ambito della direttiva. Qui stiamo usando il valore dell'attributo name come figlio dell'ambito.
mainApp.controller('StudentController', function($scope) {
$scope.Mahesh = {};
$scope.Mahesh.name = "Mahesh Parashar";
$scope.Mahesh.rollno = 1;
$scope.Piyush = {};
$scope.Piyush.name = "Piyush Parashar";
$scope.Piyush.rollno = 2;
});
Esempio
<html>
<head>
<title>Angular JS Custom Directives</title>
</head>
<body>
<h2>AngularJS Sample Application</h2>
<div ng-app = "mainApp" ng-controller = "StudentController">
<student name = "Mahesh"></student><br/>
<student name = "Piyush"></student>
</div>
<script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
</script>
<script>
var mainApp = angular.module("mainApp", []);
mainApp.directive('student', function() {
var directive = {};
directive.restrict = 'E';
directive.template = "Student: <b>{{student.name}}</b> ,
Roll No: <b>{{student.rollno}}</b>";
directive.scope = {
student : "=name"
}
directive.compile = function(element, attributes) {
element.css("border", "1px solid #cccccc");
var linkFunction = function($scope, element, attributes) {
element.html("Student: <b>"+$scope.student.name +"</b> ,
Roll No: <b>"+$scope.student.rollno+"</b><br/>");
element.css("background-color", "#ff00ff");
}
return linkFunction;
}
return directive;
});
mainApp.controller('StudentController', function($scope) {
$scope.Mahesh = {};
$scope.Mahesh.name = "Mahesh Parashar";
$scope.Mahesh.rollno = 1;
$scope.Piyush = {};
$scope.Piyush.name = "Piyush Parashar";
$scope.Piyush.rollno = 2;
});
</script>
</body>
</html>
Produzione
Apri textAngularJS.htm in un browser web. Guarda il risultato.