On Github irontec / slides-ionic
Mikel Eizagirre @ Irontec 2016
Ionic es un framework de desarrollo basado en HTML5, cuyo objetivo es desarrollar aplicaciones móviles híbridas.
Genera aplicaciones encapsuladas en web views mezclado con código nativo.
Es totalmente Open Source.
Es un framework para el desarrollo de aplicaciones móviles creado por Nitobi.
En el 2011 fue absorbido por Adobe Systems y el framework fue renombrado como PhoneGap.
Posteriormente liberaron una versión open source bajo el nombre Apache Cordova.
Permite desarrollar aplicaciones móviles con CSS3, HTML5 y JavaScript sin depender de APIs específicas de cada plataforma.
Existen multitud de plugins que se encargan de hacer llamadas nativas de todo tipo.
Como Ionic utiliza AngularJS, los plugins tienen que estar angularizados.
ngCordova es un buen repositorio de plugins compatibles con Ionic.
El rendimiento tiene mucha importancia
Animaciones por hardware.
Manipulación mínima del DOM.
Han eliminado el delay de 300ms del tap.
<div ng-app="miApp"> <ul ng-controller="miControlador"> <li ng-repeat="contacto in contactos"> {{contacto.nombre}} ({{contacto.telefono}}) </li> </ul> </div>
$scope.contactos = [ {'nombre': 'Mikel', 'telefono': '666555444'}, {'nombre': 'Jon', 'telefono': '666444555'}, {'nombre': 'Dani', 'telefono': '666554455'} ]
var Person = function(firstname, lastname) { this.firstname = firstname; this.lastname = lastname; } function logPerson() { var john = new Person('John', 'Doe'); console.log(john); } logPerson();
var Person = function(firstname, lastname) { this.firstname = firstname; this.lastname = lastname; } function logPerson(person) { console.log(person); } var john = new Person('John', 'Doe'); logPerson(john);
ngCordova nos proporciona más de 70 plugins para utilizarlos en aplicaciones desarrolladas con AngularJS.
En la documentación podemos encontrar métodos y ejemplos de cada plugin.
Y el enlace al código del wrapper y la documentación oficial.
$primary-color: #333; h1 { color: $primary-color; } a { color: $primary-color; }
h1 { color: #333; } a { color: #333; }
@mixin border-radius($radius) { -webkit-border-radius: $radius; -moz-border-radius: $radius; -ms-border-radius: $radius; border-radius: $radius; } .box { @include border-radius(10px); }
.box { -webkit-border-radius: 10px; -moz-border-radius: 10px; -ms-border-radius: 10px; border-radius: 10px; }
.box-10 { @include border-radius(10px); } .box-rect { @include border-radius(0px); }
.box-10 { -webkit-border-radius: 10px; -moz-border-radius: 10px; -ms-border-radius: 10px; border-radius: 10px; } .box-rect { -webkit-border-radius: 0px; -moz-border-radius: 0px; -ms-border-radius: 0px; border-radius: 0px; }
nav { ul { margin: 0; padding: 0; list-style: none; } li { display: inline-block; } a { display: block; padding: 6px 12px; text-decoration: none; } }
.message { border: 1px solid #ccc; padding: 10px; color: #333; } .success { @extend .message; border-color: green; } .error { @extend .message; border-color: red; } .warning { @extend .message; border-color: yellow; }
.message, .success, .error, .warning { border: 1px solid #cccccc; padding: 10px; color: #333; } .success { border-color: green; } .error { border-color: red; } .warning { border-color: yellow; }
p { @if 1 + 1 == 2 { border: 1px solid; } @if 5 < 3 { border: 2px dotted; } @if null { border: 3px double; } }
p { border: 1px solid; }
$type: monster; p { @if $type == ocean { color: blue; } @else if $type == matador { color: red; } @else if $type == monster { color: green; } @else { color: black; } }
p { color: green; }
@for $i from 1 through 3 { .item-#{$i} { width: 2em * $i; } }
.item-1 { width: 2em; } .item-2 { width: 4em; } .item-3 { width: 6em; }
@each $animal in puma, sea-slug, egret, salamander { .#{$animal}-icon { background-image: url('/images/#{$animal}.png'); } }
.puma-icon { background-image: url('/images/puma.png'); } .sea-slug-icon { background-image: url('/images/sea-slug.png'); } .egret-icon { background-image: url('/images/egret.png'); } .salamander-icon { background-image: url('/images/salamander.png'); }
@each $header, $size in (h1: 2em, h2: 1.5em, h3: 1.2em) { #{$header} { font-size: $size; } }
h1 { font-size: 2em; } h2 { font-size: 1.5em; } h3 { font-size: 1.2em; }
$i: 6; @while $i > 0 { .item-#{$i} { width: 2em * $i; } $i: $i - 2; }
.item-6 { width: 12em; } .item-4 { width: 8em; } .item-2 { width: 4em; }
/* _reset.scss */ html, body, ul, ol { margin: 0; padding: 0; }
/* base.scss */ @import 'reset'; body { font: 100% Helvetica, sans-serif; background-color: #efefef; }