lorenzo

Jan 272013
 

Proviamo a completare il mini ciclo iniziato nei post precedenti rendendo oggettivamente operativo il nostro angular.js ovvero recuperando i dati in formato json da una pagina php

La chiamata ha una struttura essenziale, useremo il metodo get passando la url della pagina che ci manderà il JSON e gestiremo con success la risposta assegnandola direttamente allo $scope:

function UtenteListCtrl($scope, $http) {
$http.get('php-to-json-01.php').success(function(data) {
$scope.utenti = data;
});
$scope.orderProp = 'id';
}

L’ultima istruzione serve per ordinare i dati.

Il resto della pagina è in linea con i post precedenti, solo gli accorgimenti del caso

<body ng-controller="UtenteListCtrl">
Cerca: <input ng-model="query">
<ul>
<li ng-repeat="utente in utenti | filter:query">
<span>{{utente.myid}}</span>
<span>{{utente.mynome}}</span>
<span>{{utente.mycognome}}</span>
</li>
</ul>
</body>

L’esempio

Jan 252013
 

Prendendo spunto dal post precedente vediamo come filtrare “al volo” dei dati e presentarli ordinati:

Lo schema sarà identico al tutorial del post precedente ma con delle interssanti varianti:

come prima cosa portiamo il controller direttamente sulla lista:


<ul ng-controller="BrowserListCtrl">

successivamente prepariamo un campo di input per filtrare i dati


Cerca: <input ng-model="query">

con l’ng-model per implementare il binding dei dati

e infine


<li ng-repeat="borwser in borwsers | filter:query | orderBy:'nome'">

dove nell’istruzione per ripetere tante liste quanti sono i nostri elemnti nel JSON agganciamo, separandoli con il pipe, ance il filtro e la clausola di ordinamento

L’esempio

Jan 232013
 

Angular.js è un framework javascript patrocinato da Google e basato sul modello MVC: Vediamo come funziona partendo dall’intestazione del nostro file html:


<!DOCTYPE HTML>
<html ng-app>
<head>
<meta charset="utf-8">
<title>Angular js</title>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js"></script>
<script>
...
</script>
</head>

Ci sono due cose da notare subito: la prima è il collegamento alla libreria, ma questo è scontato, ma soprattutto la direttiva ng-app che indica la root della pagina alla quale applicare il parsing del nostro framework

Il passaggio successivo è quello di preparare una fonte di dati che verranno utilizzati nella nosta pagina:


function BrowserListCtrl($scope) {
$scope.borwsers = [
{"id": "1", "nome": "Chrome"},
{"id": "2", "nome": "Firefox"},
{"id": "3", "nome": "Safari"},
{"id": "4", "nome": "Internet explorer"},
{"id": "5", "nome": "Opera"}
];
}

Questo sarà il nostro controller che contiene l’array di dati in formato JSON

Passaggio successivo sarà associare alla nostra pagina il controller


<body ng-controller="BrowserListCtrl">

e infine preparare la view, con una sintassi un po’ criptica ma decisamente economica:

<ul>
<li ng-repeat=”borwser in borwsers”>
<span>{{borwser.id}}</span>
<span>{{borwser.nome}}</span>
</li>
</ul>

L’esempio completo

Jan 212013
 

Che cos’è uno spinner? Uno spinner è una funzione che migliora un input di testo per l’immissione di valori numerici, con l’aggiunta della gestione  dei tasti su / giù e il tasto di gestione freccia.

In questo breve esempio predisporremo due campi di input che conterranno le coordinate in cui centrare un google maps, modificanto le coordinate dall’input migliorato dallo spinner sposteremo la mappa.

Iniziamo ad inserire nel nostro file html tutte le librerie di cui abbiamo bisogno, jquery, jquery ui, il suo css, google maps, il plugin di jquery mousewheel:

<link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
<script src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script src="http://code.jquery.com/jquery-1.8.3.js"></script>
<script src="js/jquery.mousewheel.js"></script>
<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>

Poi passiamo ad inserire nell’html della pagina i due campi di input e il div che ospiterà la mappa:


<label for="lat">Latitude</label>
<input id="lat" name="lat" value="44.797">
<br />
<label for="lng">Longitude</label>
<input id="lng" name="lng" value="9" >
<div id="map"></div>

Lo stile della mappa, giusto le dimensioni:


#map {width:500px;height:500px;}

Ora entriamo nel vivo: come prima cosa al document ready prepariamo una funzione che restituisca latitudine e longitudine prese dai dui input


function latlong() {
return new google.maps.LatLng( $("#lat").val(), $("#lng").val() );
}

Come secondo step creiamo una funzione per centrare la mappa in base al valore restituito dalla funzione precedente:


function position() {
map.setCenter( latlong() );
}

Creiamo la mappa nel modo consueto


var map = new google.maps.Map( $("#map")[0], {
zoom: 8,
center: latlong(),
mapTypeId: google.maps.MapTypeId.ROADMAP
});

E l’ultimo elemento cruciale: trasformiamo i due campi di input con lo spinner e predisponiamo l’incremento con il parametro step e poi agli eventi change e stop riposizioniamo la mappa con la funzione position()

$( "#lat, #lng" ).spinner({
step: .001,
change: position,
stop: position
});

L’esempio

Jan 192013
 

Possiamo usare il nuovo campo di input di html5, l’input type range, per acquisire un numero intero come input del nostro utente.

Come prima cosa prepariamo l’html della pagina con un form:


&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Page Title&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://code.jquery.com/jquery-1.7.1.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div data-role=&quot;page&quot; id=&quot;pagina&quot;&gt;
&lt;div data-role=&quot;header&quot;&gt;&lt;h1&gt;Slider&lt;/h1&gt;&lt;/div&gt;
&lt;div data-role=&quot;content&quot;&gt;
&lt;form action=&quot;#&quot; method=&quot;post&quot;&gt;
&lt;div data-role=&quot;fieldcontain&quot;&gt;
...
&lt;/div&gt;
&lt;/form&gt;
&lt;a href=&quot;#&quot; id=&quot;leggi&quot; data-role=&quot;button&quot;&gt;Leggi&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;

Abbiamo già inserito anche un bottoncino per la lettura.

Inseriamo quindi l’input che ci interssa:


&lt;label for=&quot;myslider&quot;&gt;Slider&lt;/label&gt;
&lt;input type=&quot;range&quot; id=&quot;myslider&quot; value=&quot;3&quot; min=&quot;0&quot; max=&quot;10&quot;&gt;

E in ultimo un piccolo script per leggere i contenuti:


$(document).ready(function(e) {
$('#leggi').on('click',function(e){
var x=$('#myslider').val();
alert(x);
})
});

L’esempio

Jan 172013
 

Come in jQuery c’è la possibilità di andare a gestire (leggere, scrivere, rimuovere) i contenuti degli attributi data-, la stessa cosa possiamo farla con jQuery Mobile. La variante sostanziale è ne metodo da utilizzare: jqmData().

Il codice:


&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Page Title&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://code.jquery.com/jquery-1.7.1.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js&quot;&gt;&lt;/script&gt;
&lt;script&gt;
$(document).ready(function(e) {
$('#set-data').on('click',function(e){
$('#store').jqmData('chiave','Contenuto inserito');
})
$('#get-data').on('click',function(e){
alert($('#store').jqmData('chiave'))
})
});
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div data-role=&quot;page&quot; id=&quot;pagina&quot;&gt;
&lt;div data-role=&quot;header&quot;&gt;&lt;h1&gt;JQMData&lt;/h1&gt;&lt;/div&gt;
&lt;div data-role=&quot;content&quot;&gt;
&lt;p id=&quot;store&quot;&gt;Paragrafo contenitore&lt;/p&gt;
&lt;a href=&quot;#&quot; id=&quot;set-data&quot; data-role=&quot;button&quot;&gt;Set data&lt;/a&gt;
&lt;a href=&quot;#&quot; id=&quot;get-data&quot; data-role=&quot;button&quot;&gt;Get data&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;

Come si può vedere abbiamo due bottoni, uno per scrivere e uno per leggere, al document ready associamo il click e in base al click andiamoa scrivere/leggere nel paragrafo che nel nostro caso fa da contenitore

L’esempio

Jan 152013
 

Come sappiamo jQuery Mobile usa di base un meccanismo ajax per passare da una pagina all’altra.

Un problema implicito in questo schema è la possibilità di settare correttamente il title della pagina, cosa che sappiamo è assolutamente rilevante in un ottica SEO. Vediamo quindi come fare, l’html:

&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Page Title&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://code.jquery.com/jquery-1.7.1.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div data-role=&quot;page&quot; id=&quot;prima&quot; data-title=&quot;Prima&quot;&gt;
&lt;div data-role=&quot;header&quot;&gt;&lt;h1&gt;Prima&lt;/h1&gt;&lt;/div&gt;
&lt;div data-role=&quot;content&quot;&gt;
&lt;a href=&quot;#seconda&quot; data-role=&quot;button&quot;&gt;Seconda&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div data-role=&quot;page&quot; id=&quot;seconda&quot; data-title=&quot;Seconda&quot;&gt;
&lt;div data-role=&quot;header&quot;&gt;&lt;h1&gt;Seconda&lt;/h1&gt;&lt;/div&gt;
&lt;div data-role=&quot;content&quot;&gt;
&lt;a href=&quot;#prima&quot; data-role=&quot;button&quot;&gt;prima&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;

Come si può vedere la soluzione passa dall’inserimento dell’attributo data-title nel div con data-role-page

L’esempio

 

Jan 132013
 

Come abbiamo visto nel post precedente possiamo leggere il contenuto di un attributo data-introdotto da html5.

Possiamo, ovviamente, anche scrivere i nostri contenuti tramite jQuery.

Partiamo dall’html del post precedente leggermente modificato:


<!DOCTYPE html>
<html lang="en">
<head>
<title>Using data() for HTML5 data- attributes</title>
</head>
<body>
<p id="test-data">Paragrafo contenitore</p>
<button id="scrivi">Scrivi</button>
<button id="leggi">Leggi</button>
<script src="http://code.jquery.com/jquery-1.8.1.min.js"></script>
<script>
...
</script>
</body>
</html>

La funzione per leggere è la medesima del post precedente, per scrivere invece useremo sempre il metodo data e passeremo due valori separati da virgola, il primo sarà il nome dell’attributo da aggiungere a data- e il secondo il valore:


$(document).ready(function() {
$('#leggi').click(function() {
alert('Contenuto: ' + $('#test-data').data('mioattributo'));
});
$('#scrivi').click(function() {
$('#test-data').data('mioattributo','prova');
});
});

L’esempio

Jan 112013
 

Uno degli aspetti interessanti di HTML5 è l’introduzione dell’attributo data- che può essere personalizzato dallo sviluppatore, Un’opzione interessante potrebbe essere quella di inserire delle informazioni in questo attributo che possono essere ripescate in un dato momento tramite jQuery. Prepariamo l’html:


<p data-myattribute="alcune parole a caso" id="test-data">
Fai click sul bottone per leggere il contenuto dell'attributo data.</p>
<button>Get data attribute</button>

Quello che ci interessa è andare a leggere il contenuto dell’attributo data-myattribute, che ovviamnete possiamo chiamare a piacere mantenendo il prefisso data-

Ora intercettiamo il click e procediamo con la lettura:


$(document).ready(function() {
$('button').click(function() {
alert('The data is: ' + $('#test-data').data('myattribute'));
});
});

Il metodo data quindi ci permette di accedere al contenuto del nostro attributo.

L’esempio

Jan 092013
 

Quanti saranno i paragrafi presenti nella nostra pagina? O in generale quanti elementi di un determinato tipo abbiamo nella nostra selezione? Per rispondere al quesito useremo la funzione length di jQuery.

Prepariamo l’html:


<h2>Fai click sul bottone per avere il numero degli elementi.</h2>
<p>Primo</p>
<p>Secondo</p>
<p>Terzo</p>
<button id="get-length">Get length</button>
<script src="http://code.jquery.com/jquery-1.8.1.min.js"></script>

Quindi intercettiamo il click sul bottone e facciamo restituire da un alert il valore che ci interessa:


$(document).ready(function() {
$('#get-length').click(function() {
alert('Length = ' + $('p').length);
});
});

L’esempio