- nazwach elementów
- klasach
- atrybutach
- komentarzach
<!doctype html> <html ng-app="directivesSample"> <head> <meta charset="utf-8"> <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js"></script> <script src="scripts/myscript.js"></script> </head> <body> <div class="my-first-directive"> </div> <my-second-directive></my-second-directive> <div my-third-directive></div> <!-- directive: my-fourth-directive exp --> </body> </html>
Aby AngularJS mógł odpowiednio zinterpretować dyrektywy zawarte w widoku, należy skonfigurować moduł aplikacji w code behind.
angular.module('directivesSample', []). directive('myFirstDirective', function(){ return { restrict : 'C', template : "<div><button>First directive</button>"+ "<label>{{myAttribute}} </label>" + "<label>{{literal}} </label>" + "<label>{{text}}</label>" + "</div>", scope: { myAttribute:'@myAttribute', literal : '=literal' }, controller : function($scope){ console.log('controller first... '); $scope.text = "someText"; $scope.literal += ' modified'; console.log("=literal " + $scope.literal); } } })
W obiekcie konfigurującym mamy do dyspozycji szereg właściwości i funkcji, które możemy modyfikować. Poniżej omówione zostały niektóre z nich:
- restrict
- template
- replace
- scope
{} -
nowy izolowany scope (brak bezpośredniego dostępu do properties z parent scope). Podczas tworzenia scope można pobierać atrybuty z elementu DOM na którym zastosowana jest dyrektywa (np. '@myAttribute', oraz dworzyć dwukierunkowy binding do właściwości z parent scope (np. '=literal'). Poniżej przykład:<body ng-controller="myController"> <div>{{literal}}</div> <div class="my-first-directive" literal="literal" my-attribute="myAttr"></div> </body>
function myController($scope){ console.log('creating outer Scope...'); $scope.literal = 'outerScope'; } angular.module('directivesSample', []). directive('myFirstDirective', function(){ return { restrict : 'C', template : "<div><button>First directive</button>"+ "<label>{{myAttribute}} </label>" + "<label>{{literal}} </label>" + "<label>{{text}}</label>" + "</div>", scope: { myAttribute:'@myAttribute', literal : '=literal' }, controller : function($scope){ console.log('controller first... '); $scope.text = "someText"; $scope.literal += ' modified'; console.log("=literal " + $scope.literal); } } })
Wyliczany napis w pierwszym divie zostanie przez data binding zaktualizowany na "outerScope modified".
- compile: function compile(tElement, tAttrs, scope)
- link: function(scope, element, attrs)
link: function(scope, element, attrs) { $(element).bind('click',function(){ alert('click'); }) }
Brak komentarzy:
Prześlij komentarz