Directivă AngularJS – Scopuri
Scopuri în directivele AngularJS
Îmi propun să vorbesc despre directivele AngularJS și despre diferitele tipuri de domenii care pot fi folosite. Există 3 moduri principale în care domeniul de aplicare poate fi transmis directivei de la vizualizarea invocatoare (HTML):
- Default Scope
- Inherited Scope
- Isolated Scope
Și domeniul de aplicare izolat ar putea fi însuși:
- Oneway
- Twoway
- Method Reference
Default Scope
În acest tip, domeniul de aplicare din vizualizarea exterioară intră pur și simplu în directivă. Altfel spus, domeniul de aplicare este transmis ca „referință” către directivă. Toate datele din domeniul de aplicare vor fi imediat disponibile în directivă pentru a fi consumate. De asemenea, orice modificare adusă domeniului de aplicare în cadrul directivei se va reflecta imediat în vizualizarea care o invocă.
Acest lucru se realizează prin specificarea domeniului de aplicare ca
scope: false // false is the default value
în definiția directivei.
În exemplul de mai jos, „nume” este zburat în directivă și orice modificare efectuată se reflectă imediat în exterior. Deoarece domeniul de aplicare este setat la true, directiva primește domeniul de aplicare ca apelant al acesteia. Acum, orice modificare adusă numelui în directivă va fi reflectată imediat în controlerul ‘MyController’.
var myApp = angular.module('myApp', );
myApp.controller('MyController', function($scope) {
$scope.name = "Jack";
});// usage: <div upper-case/></div>
myApp.directive('upperCase', function() {
return {
scope: false,
template: 'Name: <input ng-model="name"></input>'
}
});
Viitorul este @ https://jsfiddle.net/madhanganesh/830rn1fm/
Inherited Scope
În acest tip, un nou domeniu de aplicare este moștenit din domeniul de aplicare al vederii. În Javascript, obiectele sunt moștenite folosind moștenirea prototipică. Acest scenariu este descris în diagrama de mai jos:
Acest lucru se realizează prin specificarea domeniului de aplicare ca
scope: true
în definiția directivei.
În exemplul de mai jos puteți încerca să schimbați numele în directivă. Această modificare nu va fi reflectată în exterior din cauza domeniului de aplicare „moștenit”. Valoarea circulă doar în interior, dar orice modificare va avea ca rezultat o copie pentru directivă și nu va fi reflectată în exterior.
În exemplul live de mai jos, puteți vedea că ‘name’ este zburat în directivă; dar modificarea făcută în directivă nu va fi reflectată în exterior.
În exemplul de mai jos, domeniului de aplicare al directivei i se dă o valoare de true. Acest lucru înseamnă că este creat un domeniu de aplicare pentru directivă care „moștenește” din domeniul de aplicare al controlerului. Conform regulilor prototipice de moștenire din javascript, obiectul derivat (domeniul de aplicare al directivei) se referă la aceleași proprietăți ale obiectului părinte (domeniul de aplicare al controlerului). Orice modificare adusă controlerului se va reflecta în directivă, până când se face o modificare a proprietății „name” din directivă. În acel moment se creează un nou obiect pentru directivă, iar modificările sunt opace una față de cealaltă.
var myApp = angular.module('myApp', );
myApp.controller('MyController', function($scope) {
$scope.name = "Jack";
});// usage: <div upper-case/></div>
myApp.directive('upperCase', function() {
return {
scope: true,
template: 'Name: <input ng-model="name"></input>'
}
});
Viața este @ https://jsfiddle.net/madhanganesh/57sb6yg8/
Isolated Scope
În acest tip de definiție a domeniului de aplicare, directiva obține un domeniu de aplicare independent care nu primește și nu trimite înapoi date către vizualizarea care o conține.