Wstęp do jQuery - Instytutu Informatyki UJ
Transkrypt
Wstęp do jQuery - Instytutu Informatyki UJ
Programowanie w Sieci Internet — jQuery - nowy aromat kawy — angular.js Kraków, 24 października 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki Co będzie dziś jQuery - nowy aromat kawy, czyli biblioteka do programowania w Java Script po stronie klienta / programowanie dla przeglądarki, oraz co nieco o angular.js • Wstęp do jQuery, • składnia, • pisanie w jQ, • $.ajax(), • kilka przydatnych funkcji, • przykłady, • wstęp do AngularJS • składnia, • pisanie w angularze, • przykłady. Wstęp do jQuery Aby zacząć programować w jQuery nie trzeba nam dużo. Po pierwsze musimy zdobyć jakąś świeżą (jak poranne bułeczki) bibliotekę jQuery. Najświeższe biblioteki można zawsze znaleźć na stronie: http://jquery.com/download/ lub jeśli masz dostęp do Git’a, to możesz pobrać go z repository: git clone git://github.com/jquery/jquery.git Następnie należy umieścić odpowiedni link do biblioteki w kodzie strony która ma zostać obsłużona przez nasz skrypt (najlepiej zrobić to w sekcji nagłówkowej, aczkolwiek w dowolnym miejscu na stronie będzie to działać). <script src=jquery.js></script> <!-- zgodne z html5 --> I już możesz rozpocząć działanie w skrypcie. Wstęp do jQuery c.d. jQuery umożliwia: • manipulację kodem HTML / DOM, • manipulację kodem CSS, • obsługę eventów HTML, • animacje i efekty wizualne, • obsługę AJAX, • oraz wiele innych. Aby wykonać akcję na obiekcie wystarczy umieścić ją po kropce za selektorem obiektu: $(selector).action(); np.: $(‘.initiallyHiddenClass’).show(‘slow’); $(this) odnosi się do bieżącego elementu w aktualnym kontekście. Funkcje callback wykonywane są po zakończeniu działania eventu np: $(selector).show(2000,myFunction); <!-- Po zakończeniu animacji efektu show() trwającego 2000 milisekund zostanie wywołana funkcja myFunction() --> Składnia Większość programów w JS jeśli miała się uruchomić po załadowaniu strony wykorzystywało kod: • window.onload = function(){ ... } W jQuery można to zrobić na kilka sposobów: • $(document).ready(function() { ... }); • $().ready(function() { ... }); • $(function() { ... }); • jQuery(document).ready(function($) { ... }); Składnia jQuery jest bardzo podobna do CSS. Selektory są definiowane tak jak w CSS. Akcje bindowane do elementów mogą definiować własne działanie przez definiowanie funkcji: $(selector).dblclic(function() { ... }); funkcje te mogą też przyjmować eventy i operować na nich: $(‘a’).click(function(e) { e.preventDefault(); alert(‘Locked’); }); jQuery ma bardzo zwięzłą składnię łańcuchową. Każdy łańcuch rozpoczyna się od znaku $, a kolejne polecenia dopinane są do łańcucha za pomocą kropki ‘.’ $(selektor).css(‘color’,‘red’).click(function(){ alert(‘ha, ha’); }).hide(‘slow’).show(‘fast’); Pisanie w jQ Aby debugować kod jQuery można wypisywać nieznane wartości przez alert(info); lub mniej inwazyjnie dla użytkownika (w przypadku gdybyśmy zapomnieli usunąć debugu z kodu przed wdrożeniem projektu) poprzez konsolę: console.log(info); Konsola jest dostępna przez firebug’a, dragonfly’a czy inspektora. Zamiast pisać pętli for in można wykorzystać wbudowaną akcję .each(), w której można zadeklarować funkcję, która ma zostać wykonana na każdym obiekcie zwróconym przez selektor. Jako, że niektóre akcje zwracają nowy obiekt a w jQuery akcje można umieszczać łańcuchowo, nie zawsze chcemy się odwołać do nowo zwróconego obiektu. Wtedy możemy skorzystać z metody .end() aby wrócić do poprzedniego elementu jQuery. $.ajax() AJAX służy do pobierania danych z zewnętrznego źródła i obrabiania go przez kod bez konieczności przeładowywania strony. $.ajax(argumenty); argumenty: • url - adres źródła danych (np.: “rss.xml”), • type - typ zapytania (np.: “GET”), • data - obiekt z danymi do wysłania w zapytaniu, • async - czy zapytanie ma być przetwarzane asynchronicznie (domyślnie true), • beforeSend - callback przed wysłaniem wiadomości, • success - callbac na wypadek powodzenia, • error - callback na wypadek niepowodzenia, • complete - callback wykonywany po zakończeniu success lub error, • i wiele innych. Przydatne funkcje Najczęściej przydają się funkcje automatyzujące animacje czy inne efekty na stronie. • show() - rozwija element od górnego lewego rogu, • hide() - chowa element zwijając go do górnego lewego rogu, • toggle() - działa zamiennie tak jak show() i hide(), • fadeIn(), fadeOut(), fadeToggle() - ukrywanie i pokazywanie elementu, • fadeTo() - zmienia opacity elementu do zadanej wartości, • slideUp(), slideDown(), slideToggle() - zwijanie w górę, w dół i zamienne, • animate({parametry},speed,callbackFunction) - do animacji obiektów za pomocą manipulacji stylami, np.: $("div").animate({ height:’+22px’, width:’+22px’,left:’-11px’,top:’-11px’ }); • stop() - zatrzymuje akcje animacji i efektów, Przydatne funkcje c.d. • text() - zwraca wartość jedynie tekstową elementu (pomijając tagi HTML), • html() - zwraca wartość zachowując wewnątrz strukturę drzewa DOM, • val() - pobiera zawartość atrybutu value elementu, jeśli podano wartość jako atrybut, to akcje te ustawią odpowiednio zawartości elementu • attr(name,val) - jeśli brak val podaje wartość atrybutu name, wpp ustawia go na val, • append() - dopina wartość z argumentu na koniec zawartości elementu, • prepend() - jak wyżej, ale przed zawartością elementu, • after() - dopina zawartość za danym elementem, • before() - dopina zawartość przed danym elementem, • remove() - usuwa dany element z drzewa DOM wraz z wszystkimi dziećmi, • empty() - usuwa z drzewa DOM zawartość wraz z wszystimi dzieci danego elementu, • addClass(), removeClass(), toggleClass(), css() - dodaje, usuwa ulasy i zmienia css, • width(), height(), innerWidth(), innerHeight(), outerWidth(), outerHeight() - zwracają szerokości i wysokości elementu, Przykłady Kod jQuery: $("div").animate({left:'200px',fontSize:'3em',width:'+=110px',height:'-=46px'},3000); element do manipulacji na stronie: <div style="height:100px;width:200px;">ANIMATE ME</div> $.ajax({ ! type: "GET", ! url: "time.xml", ! success: function(data) { ! ! T = $(data).find(‘time’); ! ! ! ! $('.now').children().remove(); ! ! $('#schoolTable').children().remove(); ! ! var tmp = 0; ! ! var i = 0; ! ! $(‘.rows’).each(function(){ ! ! ! if(T > ++i) ! ! ! ! tmp = i; ! ! ! $('#schoolTable').append($(this)); ! ! } ! ! if(T > S && T < E) ! ! ! $('.now').append($(‘.rows:nth-child(‘+i+’)’).show(); ! ! else ! ! ! $('.now').hide(); ! } }); Wstęp do AngularJS Aby rozpocząć pracę z AngularJS, podobnie jak w przypadku jQuery, wystarczy zainkludoać bibliotekę angular.js, np. poprzez kod: <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script> ng-dyrektywy umieszczane w tagach HTMLowych rozszeżają je i definiują ich działanie. Aby kod był w pełni walidowalny do kodu HTML5, należy dodać przedrostek data• data-ng-app definiuje aplikację AngularJS (element jest “zarządcą” aplikacji), • data-ng-model łączy wartość elementu HTML (textarea, input, select) do danych aplikacji, • data-ng-bind łączy wartość danych aplikacji do widoku HTML (wypełnia innerHTML), • data-ng-init inicjalizuje aplikację (ustawia dane wejściowe itp.), • data-ng-controller definiuje kontroler, • data-ng-repeat zapętla wstawianie elementów HTMLowych do kodu strony. Wyrażenia można wrzucać bezpośrednio do zawartości tagów HTML poprzez umieszczenie ich w podwójnych nawiasach wąsiastych {{ expression }} Składnia Swoistym konstruktorem aplikacji angular.js jest controller (data-ng-controller). Jest to funkcja JS przyjmująca w atrybutach $scope - objekt aplikacji. <div ng-app="" ng-controller="carController"> Make: <input type="text" ng-model="make"><br> Model: <input type="text" ng-model="model"><br> <br> Parameters: {{ findParameters() }} </div> <script> function carController($scope, $http) { $scope.make = "BMW", $scope.model = "325i", $scope.findParameters = function() { $http.get(“./carsParameters.php?make=”+$scope.make+”&model=”+$scope.model) .success(function(response){ return response; }); } } </script> zamiast wypisywania ciała kontrolera w kodzie strony możemy go wyrzucić do osobnego pliku i zainkludować kawałkiem kodu: <script src="carController.js"></script> Można użyć kilku kontrolerów w aplikacji o różnym scope (zakresie). Wystarczy umieścić deklarację kontrolera w odpowiednim elemencie drzewa DOM w HTMLu. <div ng-controller="myCtroller"> Pisanie w angularze W przypadku gdy chcemy przerzucić część kodu modułu aplikacji, lub nawet do zewnętrznych plików js, możemy nadać aplikacji nazwę. <div ng-app="myApp" ng-controller="myCtrl"> {{ model + " " + make }} </div> <script> var app = angular.module("myApp", []); app.controller("myCtrl", function($scope) { $scope.make = "Ferrari"; $scope.model = "ff"; }); </script> W tan sposób tworzymy moduł aplikacji i możemy w nim stworzyć controller etc. Aby osadzić kod strony, np. z aplikacją angular.js, przy pomocy samego angulara, możemy wykorzystać dyrektywę data-ng-include: <div class="container"> <div ng-include="'SuperCars.htm'"></div> <div ng-include="'HyperCars.htm'"></div> </div> Filtrowanie nie koniecznie znaczy wybieranie danych ze zbioru na podstawie wyrażenia logicznego. Filtrowanie w angularze odbywa się poprzez znak pipeline ‘|’ Zamiana znaków na duże lub małe, formatowanie waluty czy sortowanie jest filtrowaniem w AngularJS. Przykłady Filtrowanie poprzez zmianę znaków na duże litery: <p>Uppercase string {{ str | uppercase }}, lowercase string {{ str | lowercase }}</p> Formatowanie waluty jako filtrowanie: <p>Total = {{ (quantity * price) | currency }}</p> Sortowanie jako filtrowanie: <ul> <li ng-repeat="x in cars | orderBy:'make'"> {{ x.make + ' ' + x.model }} </li> </ul> lub nawet filtrowanie na podstawie wpisywanych danych: <p><input type="text" ng-model="test"></p> <ul> <li ng-repeat="x in cars | filter:test | orderBy:'make'"> {{ (x.make | uppercase) + ' ' + x.model | uppercase }} </li> </ul> Dziękuję za uwagę!