Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016

Loïc Knuchel
Loïc KnuchelScala tech lead at Gospeak
The raise of web developers
@loicknuchel
?
Loïc Knuchel
Geek passionné
Freelance
Développeur web full-stack
Entrepreneur
Cookers / SalooN
loicknuchel@gmail.com
@loicknuchel
http://loic.knuchel.org/
L’histoire du smartphone
Juin 2007
Lancement de l’iPhone 1
Septembre 2008
Sortie du HTC G1
avec Android
● Nouvelles possibilités
○ UX
○ Technique
○ Business
● Un écosystème à bâtir
● Nouvelle stack technique
● Peu de personnes formées
● Développer plusieurs fois la même chose
● Environnements très spécifiques (offline, puissance, versions, diversité...)
Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016
La WebView
Idée
Coder des applications
entièrement dans la WebView
Avantages :
● Technologies et environnements connus
● Cross-platform
PhoneGap / Cordova
Mars 2009 :
Lancement de PhoneGap par Nitobi
Octobre 2011 :
Rachat de Nitobi par Adobe
Séparation de la technologie (Cordova) et des services commerciaux (PhoneGap)
Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016
Oups...
● UI moche
● UI peu réactive
● loin du look & feel natif
Mauvais support des standards du
web dans la WebView
Peu d’outils / librairies
Téléphones peu puissants
● App de mauvaise qualité
● Bugs
Souvent pour des projets à petit
budget...
Aujourd’hui
● Téléphones puissants (et de + en +)
● Très bon support des standards web dans la WebView
● Beaucoup d’outils / librairies
Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016
Ionic c’est quoi ?
+ =
Stack technologique
Natif
Web
Téléphone & APIs natives
Cordova : webview +
JavaScript bridges
Angular
Ionic
Application
Dév web = Dév mobile
DX
“We want to cater to the 99% who just want to build something functional quickly
and not break the bank to do it.” - Max Lynch
DX
#Platform continuity
#CLI
#Backend services
#Push
#Deploy
#Package#Auth
#Analytics #Ionic View
#Native plugins #Ionic Market
#Ionic Creator
@ionitron
Ionic is a complete ecosystem !
One more thing...
Hybrid apps have superpowers...
Hybrid superpowers
●
App Store installs are broken !
?
http://bit.ly/voxxrin
App Store installs are broken !
Deep linking Install tracking
Hybrid superpowers
Web App :
● Cross-platform
● Accès instantané
● Deep link
● Offline
http://bit.ly/voxxrin-bdx-lkn
Hybrid superpowers
Web App :
● Cross-platform
● Accès instantané
● Deep link
● Offline
Progressive Web App :
● Installation instantanée
● Lancement depuis la Home
● Push notifications
Hybrid superpowers
Web App :
● Cross-platform
● Accès instantané
● Deep link
● Offline
Progressive Web App :
● Installation instantanée
● Lancement depuis la Home
● Push notifications
Native App :
● Accès complet au téléphone
Hybrid superpowers
●
App Store deployment is broken !
Apple : ~ 2 jours
Google : ~ 2 heures
Hybrid superpowers
●
Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016
Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016
Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016
Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016
Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016
Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016
Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016
Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016
Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016
Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016
Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016
Nouveautés depuis Ionic 1
● Angular 2 (+ TypeScript)
● Navigation push/pop
● Nouveaux composants
○ DateTime
○ Toast
○ Searchbar
○ Segment
Getting started
Install nodejs & npm
$ npm install -g ionic@beta
$ ionic start demoApp --v2 --ts
$ cd demoApp && ionic serve
♬ ♫ ♬ ♫ Your Ionic app is ready to go! ♬ ♫ ♬ ♫
Getting started
Install mobile sdk (Android ou iOS)
$ sudo npm install -g cordova
$ ionic platform add android
$ ionic run android
Structure de fichiers
index.html
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="UTF-8">
<title>Ionic</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<link ios-href="build/css/app.ios.css" rel="stylesheet">
<link md-href="build/css/app.md.css" rel="stylesheet">
<link wp-href="build/css/app.wp.css" rel="stylesheet">
</head>
<body>
<!-- this Ionic's root component and where the app will load -->
<ion-app></ion-app>
<!-- cordova.js required for cordova apps -->
<script src="cordova.js"></script>
<!-- Polyfill needed for platforms without Promise and Collection support -->
<script src="build/js/es6-shim.min.js"></script>
<!-- Zone.js and Reflect-metadata -->
<script src="build/js/Reflect.js"></script>
<script src="build/js/zone.js"></script>
<!-- the bundle which is built from the app's source code -->
<script src="build/js/app.bundle.js"></script>
</body>
</html>
app.ts
import {App, Platform} from 'ionic-angular';
import {StatusBar} from 'ionic-native';
import {TabsPage} from './pages/tabs/tabs';
@App({
template: '<ion-nav [root]="rootPage"></ion-nav>',
config: {} // http://ionicframework.com/docs/v2/api/config/Config/
})
export class MyApp {
rootPage: any = TabsPage;
constructor(platform: Platform) {
platform.ready().then(() => {
// Okay, so the platform is ready and our plugins are available.
// Here you can do any higher level native things you might need.
StatusBar.styleDefault();
});
}
}
page1.ts
import {Page} from 'ionic-angular';
@Page({
templateUrl: 'build/pages/page1/page1.html'
})
export class Page1 {
constructor() {
}
}
<ion-navbar *navbar>
<ion-title>Tab 1</ion-title>
</ion-navbar>
<ion-content padding class="page1">
<h2>Welcome to Ionic!</h2>
<p>
This starter project comes with simple
tabs-based layout for apps that are going to
primarily use a Tabbed UI.
</p>
<p>
Take a look at the <code>app/</code>
directory to add or change tabs, update any
existing page or create new pages.
</p>
</ion-content>
page1.ts
import {Page} from 'ionic-angular';
@Page({
template: `
<ion-navbar *navbar>
<ion-title>Tab 1</ion-title>
</ion-navbar>
<ion-content padding class="page1">
<h2>Welcome to Ionic!</h2>
<p>
This starter project comes with simple tabs-based layout for apps that are going to primarily
use a Tabbed UI.
</p>
</ion-content>`
})
export class Page1 {
constructor() {}
}
page1.ts
import {Page} from 'ionic-angular';
@Page({
styles: [`
.page1 h2 {
color: red;
}
`],
template: `...`
})
export class Page1 {
constructor() {}
}
Angular 1 vs Angular 2
● bootstrap manuel
● Filter => Pipe
● Controllers => Components
● Directives => Components
● $scope => Class properties
● Services => Injectables
Template
● Bindings :
● Pipes :
● Propriétés / Input :
● Evénements / Output :
● Double binding :
● Templates :
● Local variables :
● Boucles :
Your favorite hero is: {{favoriteHero}}
<span>{{movie.title | uppercase}}</span>
<a [href]="angularDocsUrl">Angular Docs</a>
<button (click)="toggleMovie()"></button>
<input [(ngModel)]="favoriteMovie" />
<div *ngIf="movies.length === 0">No movies</div>
<video-player #player></video-player>
<button (click)="player.pause()">Pause</button>
<ul *ngFor="let movie of movies">
<li>{{movie.title}}</li>
</ul>
Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016
Créer une nouvelle page
todo.page.ts todo.html todo.scss
import {Page} from 'ionic-angular';
@Page({
templateUrl: 'build/pages/todo/todo.html'
})
export class TodoPage {
constructor() { }
}
<ion-navbar *navbar>
<ion-title>Todos</ion-title>
</ion-navbar>
<ion-content class="todo-page">
</ion-content>
.todo-page {
.done {
text-decoration: line-through;
}
}
import {App, Platform} from 'ionic-angular';
import {StatusBar} from 'ionic-native';
import {TabsPage} from './pages/tabs/tabs';
import {TodoPage} from "./pages/todo/todo.page";
@App({
template: '<ion-nav [root]="rootPage"></ion-nav>',
config: {}
})
export class MyApp {
rootPage: any = TodoPage;
constructor(platform: Platform) {
platform.ready().then(() => {
StatusBar.styleDefault();
});
}
}
// http://ionicframework.com/docs/v2/theming/
// App Shared Imports
// --------------------------------------------------
// These are the imports which make up the design of
this app.
// By default each design mode includes these shared
imports.
// App Shared Sass variables belong in app.variables.
scss.
@import "../pages/page1/page1";
@import "../pages/page2/page2";
@import "../pages/page3/page3";
@import "../pages/todo/todo";
app.ts theme/app.core.scss
Ionic2 TODO list
import {Page} from 'ionic-angular';
class Todo {
constructor(
public name: string,
public done: boolean = false
) {}
}
@Page({
templateUrl: 'build/pages/todo/todo.html'
})
export class TodoPage {
constructor() { }
}
<ion-navbar *navbar>
<ion-title>Todos</ion-title>
</ion-navbar>
<ion-content class="todo-page">
</ion-content>
Ionic2 TODO list
import {Page} from 'ionic-angular';
class Todo {
constructor(
public name: string,
public done: boolean = false
) {}
}
@Page({
templateUrl: 'build/pages/todo/todo.html'
})
export class TodoPage {
todos: Todo[] = [
new Todo('todo 1'),
new Todo('todo 2'),
new Todo('todo 3')
];
constructor() { }
}
<ion-navbar *navbar>
<ion-title>Todos</ion-title>
</ion-navbar>
<ion-content class="todo-page">
</ion-content>
Ionic2 TODO list
<ion-navbar *navbar>
<ion-title>Todos</ion-title>
</ion-navbar>
<ion-content class="todo-page">
<ion-list>
<ion-item *ngFor="let todo of todos" [hidden]="todo.done">
<ion-label>{{todo.name}}</ion-label>
<ion-checkbox [(ngModel)]="todo.done"></ion-checkbox>
</ion-item>
<ion-item *ngFor="let todo of todos" [hidden]="!todo.done">
<ion-label class="done">{{todo.name}}</ion-label>
<ion-checkbox [(ngModel)]="todo.done" disabled="true"></ion-checkbox>
</ion-item>
</ion-list>
</ion-content>
Ionic2 TODO list
import {Page} from 'ionic-angular';
@Page({
templateUrl: 'build/pages/todo/todo.html'
})
export class TodoPage {
newTodo: string = '';
todos: Todo[] = [
new Todo('todo 1'),
new Todo('todo 2'),
new Todo('todo 3')
];
constructor() { }
create(text: string): void {
this.todos.push(new Todo(text));
this.newTodo = '';
}
}
<ion-navbar *navbar>
<ion-title>Todos</ion-title>
</ion-navbar>
<ion-toolbar>
<ion-input type="text" [(ngModel)]="newTodo" placeholder="Nouvelle tâche">
</ion-input>
<ion-buttons end>
<button (click)="create(newTodo)">
<ion-icon name="send"></ion-icon>
</button>
</ion-buttons>
</ion-toolbar>
<ion-content class="todo-page">
<ion-list>
...
</ion-list>
</ion-content>
Ionic2 TODO list
import {Page} from 'ionic-angular';
@Page({
templateUrl: 'build/pages/todo/todo.html'
})
export class TodoPage {
newTodo: string = '';
todos: Todo[] = [...];
constructor() { }
create(text: string): void { ... }
delete(todo: Todo): void {
const i = this.todos.indexOf(todo);
if(i >= 0) {
this.todos.splice(i, 1);
}
}
}
<ion-navbar *navbar>
<ion-title>Todos</ion-title>
</ion-navbar>
<ion-toolbar>
...
</ion-toolbar>
<ion-content class="todo-page">
<ion-list>
<ion-item *ngFor="let todo of todos" [hidden]="todo.done">
<ion-label>{{todo.name}}</ion-label>
<ion-checkbox [(ngModel)]="todo.done"></ion-checkbox>
</ion-item>
<ion-item *ngFor="..." [hidden]="!todo.done" (click)="delete(todo)">
<ion-label class="done">{{todo.name}}</ion-label>
<ion-checkbox [(ngModel)]="todo.done" disabled="true"></ion-checkbox>
</ion-item>
</ion-list>
</ion-content>
Ionic2 TODO list
import {Page} from 'ionic-angular';
@Page({
templateUrl: 'build/pages/todo/todo.html'
})
export class TodoPage {
newTodo: string = '';
todos: Todo[] = [...];
constructor() { }
create(text: string): void { ... }
delete(todo: Todo): void {
const i = this.todos.indexOf(todo);
if(i >= 0) {
this.todos.splice(i, 1);
}
}
}
<ion-navbar *navbar>
<ion-title>Todos</ion-title>
</ion-navbar>
<ion-toolbar>
...
</ion-toolbar>
<ion-content class="todo-page">
<ion-list>
<ion-item *ngFor="let todo of todos" [hidden]="todo.done">
<ion-label>{{todo.name}}</ion-label>
<ion-checkbox [(ngModel)]="todo.done"></ion-checkbox>
</ion-item>
<ion-item *ngFor="..." [hidden]="!todo.done" (click)="delete(todo)">
<ion-label class="done">{{todo.name}}</ion-label>
<ion-checkbox [(ngModel)]="todo.done" disabled="true"></ion-checkbox>
</ion-item>
</ion-list>
</ion-content>
Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016
Pour tester ce weekend...
Pour tester ce weekend...
http://ionicframework.com/docs/v2/
https://github.com/driftyco/ionic-conference-app
https://github.com/saloonapp/saloon-app
http://mcgivery.com/15-ionic-framework-2-resources/ (60+ maintenant…)
https://angular.io/docs/ts/latest/cookbook/
https://forum.ionicframework.com/
http://loic.knuchel.org/blog/
Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016
Questions ?
@loicknuchel
1 of 71

Recommended

Ionic2, les développeurs web à l'assaut du mobile, BDX I/O le 21/10/2016 by
Ionic2, les développeurs web à l'assaut du mobile, BDX I/O le 21/10/2016Ionic2, les développeurs web à l'assaut du mobile, BDX I/O le 21/10/2016
Ionic2, les développeurs web à l'assaut du mobile, BDX I/O le 21/10/2016Loïc Knuchel
504 views106 slides
Ionic bbl le 19 février 2015 by
Ionic bbl le 19 février 2015Ionic bbl le 19 février 2015
Ionic bbl le 19 février 2015Loïc Knuchel
5.7K views48 slides
[Lighting Talk] - Ionic 2 Tour by
[Lighting Talk] - Ionic 2 Tour[Lighting Talk] - Ionic 2 Tour
[Lighting Talk] - Ionic 2 TourCode Experts Learning
466 views13 slides
Rapid mobile development with Ionic framework - Voxxdays Ticino 2015 by
Rapid mobile development with Ionic framework - Voxxdays Ticino 2015Rapid mobile development with Ionic framework - Voxxdays Ticino 2015
Rapid mobile development with Ionic framework - Voxxdays Ticino 2015Alessio Delmonti
1.4K views38 slides
Ionic - Revolutionizing Hybrid Mobile Application Development by
Ionic - Revolutionizing Hybrid Mobile Application DevelopmentIonic - Revolutionizing Hybrid Mobile Application Development
Ionic - Revolutionizing Hybrid Mobile Application DevelopmentJustin James
5K views54 slides
Ionic2 the the journey continues ng-sydney 02-03-16 and ionicaustralia 23-0... by
Ionic2   the the journey continues ng-sydney 02-03-16 and ionicaustralia 23-0...Ionic2   the the journey continues ng-sydney 02-03-16 and ionicaustralia 23-0...
Ionic2 the the journey continues ng-sydney 02-03-16 and ionicaustralia 23-0...Sameera Gayan
557 views18 slides

More Related Content

What's hot

Ionic Crash Course! Hack-a-ton SF by
Ionic Crash Course! Hack-a-ton SFIonic Crash Course! Hack-a-ton SF
Ionic Crash Course! Hack-a-ton SFLukas Ruebbelke
19.8K views23 slides
Ionic Framework: Let's build amazing apps. No Excuses! by
Ionic Framework: Let's build amazing apps. No Excuses!Ionic Framework: Let's build amazing apps. No Excuses!
Ionic Framework: Let's build amazing apps. No Excuses!Matheus Cardoso
1.5K views46 slides
Ionic Mobile Applications - Hybrid Mobile Applications Without Compromises by
Ionic Mobile Applications - Hybrid Mobile Applications Without CompromisesIonic Mobile Applications - Hybrid Mobile Applications Without Compromises
Ionic Mobile Applications - Hybrid Mobile Applications Without CompromisesJacob Friesen
2.4K views35 slides
Hybrid app development with ionic by
Hybrid app development with ionicHybrid app development with ionic
Hybrid app development with ionicWan Muzaffar Wan Hashim
1.8K views88 slides
Ionic 2: Mobile apps with the Web by
Ionic 2: Mobile apps with the WebIonic 2: Mobile apps with the Web
Ionic 2: Mobile apps with the WebMike Hartington
817 views34 slides
Developing Hybrid Applications with IONIC by
Developing Hybrid Applications with IONICDeveloping Hybrid Applications with IONIC
Developing Hybrid Applications with IONICFuat Buğra AYDIN
920 views57 slides

What's hot(20)

Ionic Crash Course! Hack-a-ton SF by Lukas Ruebbelke
Ionic Crash Course! Hack-a-ton SFIonic Crash Course! Hack-a-ton SF
Ionic Crash Course! Hack-a-ton SF
Lukas Ruebbelke19.8K views
Ionic Framework: Let's build amazing apps. No Excuses! by Matheus Cardoso
Ionic Framework: Let's build amazing apps. No Excuses!Ionic Framework: Let's build amazing apps. No Excuses!
Ionic Framework: Let's build amazing apps. No Excuses!
Matheus Cardoso1.5K views
Ionic Mobile Applications - Hybrid Mobile Applications Without Compromises by Jacob Friesen
Ionic Mobile Applications - Hybrid Mobile Applications Without CompromisesIonic Mobile Applications - Hybrid Mobile Applications Without Compromises
Ionic Mobile Applications - Hybrid Mobile Applications Without Compromises
Jacob Friesen2.4K views
Ionic 2: Mobile apps with the Web by Mike Hartington
Ionic 2: Mobile apps with the WebIonic 2: Mobile apps with the Web
Ionic 2: Mobile apps with the Web
Mike Hartington817 views
Developing Hybrid Applications with IONIC by Fuat Buğra AYDIN
Developing Hybrid Applications with IONICDeveloping Hybrid Applications with IONIC
Developing Hybrid Applications with IONIC
Fuat Buğra AYDIN920 views
Cross-Platform Mobile Development with Ionic Framework and Angular by Movel
Cross-Platform Mobile Development with Ionic Framework and AngularCross-Platform Mobile Development with Ionic Framework and Angular
Cross-Platform Mobile Development with Ionic Framework and Angular
Movel1.9K views
Creating an hybrid app in minutes with Ionic Framework by Julien Renaux
Creating an hybrid app in minutes with Ionic FrameworkCreating an hybrid app in minutes with Ionic Framework
Creating an hybrid app in minutes with Ionic Framework
Julien Renaux9.8K views
Mobile Web Development with HTML5 by Roy Clarkson
Mobile Web Development with HTML5Mobile Web Development with HTML5
Mobile Web Development with HTML5
Roy Clarkson905 views
Ionic framework one day training by Troy Miles
Ionic framework one day trainingIonic framework one day training
Ionic framework one day training
Troy Miles8K views
Cross Platform Mobile Apps with the Ionic Framework by Troy Miles
Cross Platform Mobile Apps with the Ionic FrameworkCross Platform Mobile Apps with the Ionic Framework
Cross Platform Mobile Apps with the Ionic Framework
Troy Miles6.4K views
Introduction to Ionic framework by Shyjal Raazi
Introduction to Ionic frameworkIntroduction to Ionic framework
Introduction to Ionic framework
Shyjal Raazi8.6K views
From Idea to App (or “How we roll at Small Town Heroes”) by Bramus Van Damme
From Idea to App (or “How we roll at Small Town Heroes”)From Idea to App (or “How we roll at Small Town Heroes”)
From Idea to App (or “How we roll at Small Town Heroes”)
Bramus Van Damme8.6K views
Building an Ionic hybrid mobile app with TypeScript by Serge van den Oever
Building an Ionic hybrid mobile app with TypeScript Building an Ionic hybrid mobile app with TypeScript
Building an Ionic hybrid mobile app with TypeScript
Serge van den Oever22.8K views
React Native for multi-platform mobile applications by Matteo Manchi
React Native for multi-platform mobile applicationsReact Native for multi-platform mobile applications
React Native for multi-platform mobile applications
Matteo Manchi1.6K views
Ionic CLI Adventures by Juarez Filho
Ionic CLI AdventuresIonic CLI Adventures
Ionic CLI Adventures
Juarez Filho3.2K views
App developer as a Web developer (ROROSyd - Jul 15) by Sameera Gayan
App developer as a Web developer (ROROSyd - Jul 15)App developer as a Web developer (ROROSyd - Jul 15)
App developer as a Web developer (ROROSyd - Jul 15)
Sameera Gayan286 views

Similar to Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016

Ionic2 by
Ionic2Ionic2
Ionic2Jiayun Zhou
3K views71 slides
NativeScript and Angular by
NativeScript and AngularNativeScript and Angular
NativeScript and AngularJen Looper
3 views23 slides
PhoneGap by
PhoneGapPhoneGap
PhoneGapEmil Varga
1.6K views14 slides
Ignite your app development with Angular, NativeScript and Firebase by
Ignite your app development with Angular, NativeScript and FirebaseIgnite your app development with Angular, NativeScript and Firebase
Ignite your app development with Angular, NativeScript and FirebaseJen Looper
5 views50 slides
Angularjs Tutorial for Beginners by
Angularjs Tutorial for BeginnersAngularjs Tutorial for Beginners
Angularjs Tutorial for Beginnersrajkamaltibacademy
56 views33 slides
Myths of Angular 2: What Angular Really Is by
Myths of Angular 2: What Angular Really IsMyths of Angular 2: What Angular Really Is
Myths of Angular 2: What Angular Really IsDevFest DC
296 views48 slides

Similar to Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016(20)

NativeScript and Angular by Jen Looper
NativeScript and AngularNativeScript and Angular
NativeScript and Angular
Jen Looper3 views
Ignite your app development with Angular, NativeScript and Firebase by Jen Looper
Ignite your app development with Angular, NativeScript and FirebaseIgnite your app development with Angular, NativeScript and Firebase
Ignite your app development with Angular, NativeScript and Firebase
Jen Looper5 views
Myths of Angular 2: What Angular Really Is by DevFest DC
Myths of Angular 2: What Angular Really IsMyths of Angular 2: What Angular Really Is
Myths of Angular 2: What Angular Really Is
DevFest DC 296 views
Introduction to PhoneGap by Ramesh Nair
Introduction to PhoneGapIntroduction to PhoneGap
Introduction to PhoneGap
Ramesh Nair3.9K views
Tutorial: Develop Mobile Applications with AngularJS by Philipp Burgmer
Tutorial: Develop Mobile Applications with AngularJSTutorial: Develop Mobile Applications with AngularJS
Tutorial: Develop Mobile Applications with AngularJS
Philipp Burgmer4.1K views
Cross Platform Mobile Development using Flutter by Wei Meng Lee at Mobile foc... by DevClub_lv
Cross Platform Mobile Development using Flutter by Wei Meng Lee at Mobile foc...Cross Platform Mobile Development using Flutter by Wei Meng Lee at Mobile foc...
Cross Platform Mobile Development using Flutter by Wei Meng Lee at Mobile foc...
DevClub_lv2.5K views
HotPush with Ionic 2 and CodePush by Evan Schultz
HotPush with Ionic 2 and CodePushHotPush with Ionic 2 and CodePush
HotPush with Ionic 2 and CodePush
Evan Schultz4.8K views
Cross Platform Mobile App Development by Annmarie Lanesey
Cross Platform Mobile App DevelopmentCross Platform Mobile App Development
Cross Platform Mobile App Development
Annmarie Lanesey2.8K views
Intro to Ionic for Building Hybrid Mobile Applications by Sasha dos Santos
Intro to Ionic for Building Hybrid Mobile ApplicationsIntro to Ionic for Building Hybrid Mobile Applications
Intro to Ionic for Building Hybrid Mobile Applications
Sasha dos Santos5.9K views
NCDevCon 2017 - Cross Platform Mobile Apps by John M. Wargo
NCDevCon 2017 - Cross Platform Mobile AppsNCDevCon 2017 - Cross Platform Mobile Apps
NCDevCon 2017 - Cross Platform Mobile Apps
John M. Wargo448 views
Automating Your Way out of the Dark Ages: Our Experience with (And Without) P... by Burin Asavesna
Automating Your Way out of the Dark Ages: Our Experience with (And Without) P...Automating Your Way out of the Dark Ages: Our Experience with (And Without) P...
Automating Your Way out of the Dark Ages: Our Experience with (And Without) P...
Burin Asavesna3.3K views
Introduction phonegap by Rakesh Jha
Introduction phonegapIntroduction phonegap
Introduction phonegap
Rakesh Jha589 views

More from Loïc Knuchel

Scala bad practices, scala.io 2019 by
Scala bad practices, scala.io 2019Scala bad practices, scala.io 2019
Scala bad practices, scala.io 2019Loïc Knuchel
803 views22 slides
Mutation testing, enfin une bonne mesure de la qualité des tests ?, RivieraDe... by
Mutation testing, enfin une bonne mesure de la qualité des tests ?, RivieraDe...Mutation testing, enfin une bonne mesure de la qualité des tests ?, RivieraDe...
Mutation testing, enfin une bonne mesure de la qualité des tests ?, RivieraDe...Loïc Knuchel
1.7K views43 slides
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016 by
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016Loïc Knuchel
962 views63 slides
FP is coming... le 19/05/2016 by
FP is coming... le 19/05/2016FP is coming... le 19/05/2016
FP is coming... le 19/05/2016Loïc Knuchel
681 views98 slides
Programmation fonctionnelle en JavaScript by
Programmation fonctionnelle en JavaScriptProgrammation fonctionnelle en JavaScript
Programmation fonctionnelle en JavaScriptLoïc Knuchel
1.2K views88 slides
Ionic Framework, L'avenir du mobile sera hybride, bdx.io le 16-10-2015 by
Ionic Framework, L'avenir du mobile sera hybride, bdx.io le 16-10-2015Ionic Framework, L'avenir du mobile sera hybride, bdx.io le 16-10-2015
Ionic Framework, L'avenir du mobile sera hybride, bdx.io le 16-10-2015Loïc Knuchel
2.8K views50 slides

More from Loïc Knuchel(12)

Scala bad practices, scala.io 2019 by Loïc Knuchel
Scala bad practices, scala.io 2019Scala bad practices, scala.io 2019
Scala bad practices, scala.io 2019
Loïc Knuchel803 views
Mutation testing, enfin une bonne mesure de la qualité des tests ?, RivieraDe... by Loïc Knuchel
Mutation testing, enfin une bonne mesure de la qualité des tests ?, RivieraDe...Mutation testing, enfin une bonne mesure de la qualité des tests ?, RivieraDe...
Mutation testing, enfin une bonne mesure de la qualité des tests ?, RivieraDe...
Loïc Knuchel1.7K views
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016 by Loïc Knuchel
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Loïc Knuchel962 views
FP is coming... le 19/05/2016 by Loïc Knuchel
FP is coming... le 19/05/2016FP is coming... le 19/05/2016
FP is coming... le 19/05/2016
Loïc Knuchel681 views
Programmation fonctionnelle en JavaScript by Loïc Knuchel
Programmation fonctionnelle en JavaScriptProgrammation fonctionnelle en JavaScript
Programmation fonctionnelle en JavaScript
Loïc Knuchel1.2K views
Ionic Framework, L'avenir du mobile sera hybride, bdx.io le 16-10-2015 by Loïc Knuchel
Ionic Framework, L'avenir du mobile sera hybride, bdx.io le 16-10-2015Ionic Framework, L'avenir du mobile sera hybride, bdx.io le 16-10-2015
Ionic Framework, L'avenir du mobile sera hybride, bdx.io le 16-10-2015
Loïc Knuchel2.8K views
Ionic, ce n'est pas que de l'UI, meetup PhoneGap le 25-05-2015 by Loïc Knuchel
Ionic, ce n'est pas que de l'UI, meetup PhoneGap le 25-05-2015Ionic, ce n'est pas que de l'UI, meetup PhoneGap le 25-05-2015
Ionic, ce n'est pas que de l'UI, meetup PhoneGap le 25-05-2015
Loïc Knuchel1.6K views
Le développement mobile hybride sort du bois, Ch'ti JUG le 15-04-2015 by Loïc Knuchel
Le développement mobile hybride sort du bois, Ch'ti JUG le 15-04-2015Le développement mobile hybride sort du bois, Ch'ti JUG le 15-04-2015
Le développement mobile hybride sort du bois, Ch'ti JUG le 15-04-2015
Loïc Knuchel3.4K views
Devoxx 2015, Atelier Ionic - 09/04/2015 by Loïc Knuchel
Devoxx 2015, Atelier Ionic - 09/04/2015Devoxx 2015, Atelier Ionic - 09/04/2015
Devoxx 2015, Atelier Ionic - 09/04/2015
Loïc Knuchel3.4K views
Devoxx 2015, ionic chat by Loïc Knuchel
Devoxx 2015, ionic chatDevoxx 2015, ionic chat
Devoxx 2015, ionic chat
Loïc Knuchel2.5K views
Ionic HumanTalks - 11/03/2015 by Loïc Knuchel
Ionic HumanTalks - 11/03/2015Ionic HumanTalks - 11/03/2015
Ionic HumanTalks - 11/03/2015
Loïc Knuchel1.7K views
Des maths et des recommandations - Devoxx 2014 by Loïc Knuchel
Des maths et des recommandations - Devoxx 2014Des maths et des recommandations - Devoxx 2014
Des maths et des recommandations - Devoxx 2014
Loïc Knuchel1.2K views

Recently uploaded

Introduction to Gradle by
Introduction to GradleIntroduction to Gradle
Introduction to GradleJohn Valentino
5 views7 slides
DRYiCE™ iAutomate: AI-enhanced Intelligent Runbook Automation by
DRYiCE™ iAutomate: AI-enhanced Intelligent Runbook AutomationDRYiCE™ iAutomate: AI-enhanced Intelligent Runbook Automation
DRYiCE™ iAutomate: AI-enhanced Intelligent Runbook AutomationHCLSoftware
6 views8 slides
FOSSLight Community Day 2023-11-30 by
FOSSLight Community Day 2023-11-30FOSSLight Community Day 2023-11-30
FOSSLight Community Day 2023-11-30Shane Coughlan
6 views18 slides
Agile 101 by
Agile 101Agile 101
Agile 101John Valentino
9 views20 slides
ShortStory_qlora.pptx by
ShortStory_qlora.pptxShortStory_qlora.pptx
ShortStory_qlora.pptxpranathikrishna22
5 views10 slides
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated... by
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...TomHalpin9
6 views29 slides

Recently uploaded(20)

DRYiCE™ iAutomate: AI-enhanced Intelligent Runbook Automation by HCLSoftware
DRYiCE™ iAutomate: AI-enhanced Intelligent Runbook AutomationDRYiCE™ iAutomate: AI-enhanced Intelligent Runbook Automation
DRYiCE™ iAutomate: AI-enhanced Intelligent Runbook Automation
HCLSoftware6 views
FOSSLight Community Day 2023-11-30 by Shane Coughlan
FOSSLight Community Day 2023-11-30FOSSLight Community Day 2023-11-30
FOSSLight Community Day 2023-11-30
Shane Coughlan6 views
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated... by TomHalpin9
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...
Dev-HRE-Ops - Addressing the _Last Mile DevOps Challenge_ in Highly Regulated...
TomHalpin96 views
predicting-m3-devopsconMunich-2023-v2.pptx by Tier1 app
predicting-m3-devopsconMunich-2023-v2.pptxpredicting-m3-devopsconMunich-2023-v2.pptx
predicting-m3-devopsconMunich-2023-v2.pptx
Tier1 app9 views
Fleet Management Software in India by Fleetable
Fleet Management Software in India Fleet Management Software in India
Fleet Management Software in India
Fleetable12 views
Ports-and-Adapters Architecture for Embedded HMI by Burkhard Stubert
Ports-and-Adapters Architecture for Embedded HMIPorts-and-Adapters Architecture for Embedded HMI
Ports-and-Adapters Architecture for Embedded HMI
Burkhard Stubert26 views
Airline Booking Software by SharmiMehta
Airline Booking SoftwareAirline Booking Software
Airline Booking Software
SharmiMehta7 views
Generic or specific? Making sensible software design decisions by Bert Jan Schrijver
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisions
360 graden fabriek by info33492
360 graden fabriek360 graden fabriek
360 graden fabriek
info33492143 views
Sprint 226 by ManageIQ
Sprint 226Sprint 226
Sprint 226
ManageIQ10 views
Dapr Unleashed: Accelerating Microservice Development by Miroslav Janeski
Dapr Unleashed: Accelerating Microservice DevelopmentDapr Unleashed: Accelerating Microservice Development
Dapr Unleashed: Accelerating Microservice Development
Miroslav Janeski12 views
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P... by NimaTorabi2
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...
Unlocking the Power of AI in Product Management - A Comprehensive Guide for P...
NimaTorabi215 views
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with... by sparkfabrik
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
20231129 - Platform @ localhost 2023 - Application-driven infrastructure with...
sparkfabrik8 views

Ionic2 - the raise of web developer, Riviera DEV le 17/06/2016

  • 1. The raise of web developers @loicknuchel
  • 2. ?
  • 3. Loïc Knuchel Geek passionné Freelance Développeur web full-stack Entrepreneur Cookers / SalooN loicknuchel@gmail.com @loicknuchel http://loic.knuchel.org/
  • 5. Juin 2007 Lancement de l’iPhone 1
  • 6. Septembre 2008 Sortie du HTC G1 avec Android
  • 7. ● Nouvelles possibilités ○ UX ○ Technique ○ Business ● Un écosystème à bâtir
  • 8. ● Nouvelle stack technique ● Peu de personnes formées ● Développer plusieurs fois la même chose ● Environnements très spécifiques (offline, puissance, versions, diversité...)
  • 11. Idée Coder des applications entièrement dans la WebView Avantages : ● Technologies et environnements connus ● Cross-platform
  • 12. PhoneGap / Cordova Mars 2009 : Lancement de PhoneGap par Nitobi Octobre 2011 : Rachat de Nitobi par Adobe Séparation de la technologie (Cordova) et des services commerciaux (PhoneGap)
  • 14. Oups... ● UI moche ● UI peu réactive ● loin du look & feel natif Mauvais support des standards du web dans la WebView Peu d’outils / librairies Téléphones peu puissants ● App de mauvaise qualité ● Bugs Souvent pour des projets à petit budget...
  • 15. Aujourd’hui ● Téléphones puissants (et de + en +) ● Très bon support des standards web dans la WebView ● Beaucoup d’outils / librairies
  • 18. Stack technologique Natif Web Téléphone & APIs natives Cordova : webview + JavaScript bridges Angular Ionic Application
  • 19. Dév web = Dév mobile
  • 20. DX “We want to cater to the 99% who just want to build something functional quickly and not break the bank to do it.” - Max Lynch
  • 21. DX #Platform continuity #CLI #Backend services #Push #Deploy #Package#Auth #Analytics #Ionic View #Native plugins #Ionic Market #Ionic Creator
  • 23. Ionic is a complete ecosystem !
  • 25. Hybrid apps have superpowers...
  • 27. App Store installs are broken ! ? http://bit.ly/voxxrin
  • 28. App Store installs are broken ! Deep linking Install tracking
  • 29. Hybrid superpowers Web App : ● Cross-platform ● Accès instantané ● Deep link ● Offline http://bit.ly/voxxrin-bdx-lkn
  • 30. Hybrid superpowers Web App : ● Cross-platform ● Accès instantané ● Deep link ● Offline Progressive Web App : ● Installation instantanée ● Lancement depuis la Home ● Push notifications
  • 31. Hybrid superpowers Web App : ● Cross-platform ● Accès instantané ● Deep link ● Offline Progressive Web App : ● Installation instantanée ● Lancement depuis la Home ● Push notifications Native App : ● Accès complet au téléphone
  • 33. App Store deployment is broken ! Apple : ~ 2 jours Google : ~ 2 heures
  • 46. Nouveautés depuis Ionic 1 ● Angular 2 (+ TypeScript) ● Navigation push/pop ● Nouveaux composants ○ DateTime ○ Toast ○ Searchbar ○ Segment
  • 47. Getting started Install nodejs & npm $ npm install -g ionic@beta $ ionic start demoApp --v2 --ts $ cd demoApp && ionic serve ♬ ♫ ♬ ♫ Your Ionic app is ready to go! ♬ ♫ ♬ ♫
  • 48. Getting started Install mobile sdk (Android ou iOS) $ sudo npm install -g cordova $ ionic platform add android $ ionic run android
  • 50. index.html <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>Ionic</title> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="format-detection" content="telephone=no"> <meta name="msapplication-tap-highlight" content="no"> <link ios-href="build/css/app.ios.css" rel="stylesheet"> <link md-href="build/css/app.md.css" rel="stylesheet"> <link wp-href="build/css/app.wp.css" rel="stylesheet"> </head> <body> <!-- this Ionic's root component and where the app will load --> <ion-app></ion-app> <!-- cordova.js required for cordova apps --> <script src="cordova.js"></script> <!-- Polyfill needed for platforms without Promise and Collection support --> <script src="build/js/es6-shim.min.js"></script> <!-- Zone.js and Reflect-metadata --> <script src="build/js/Reflect.js"></script> <script src="build/js/zone.js"></script> <!-- the bundle which is built from the app's source code --> <script src="build/js/app.bundle.js"></script> </body> </html>
  • 51. app.ts import {App, Platform} from 'ionic-angular'; import {StatusBar} from 'ionic-native'; import {TabsPage} from './pages/tabs/tabs'; @App({ template: '<ion-nav [root]="rootPage"></ion-nav>', config: {} // http://ionicframework.com/docs/v2/api/config/Config/ }) export class MyApp { rootPage: any = TabsPage; constructor(platform: Platform) { platform.ready().then(() => { // Okay, so the platform is ready and our plugins are available. // Here you can do any higher level native things you might need. StatusBar.styleDefault(); }); } }
  • 52. page1.ts import {Page} from 'ionic-angular'; @Page({ templateUrl: 'build/pages/page1/page1.html' }) export class Page1 { constructor() { } } <ion-navbar *navbar> <ion-title>Tab 1</ion-title> </ion-navbar> <ion-content padding class="page1"> <h2>Welcome to Ionic!</h2> <p> This starter project comes with simple tabs-based layout for apps that are going to primarily use a Tabbed UI. </p> <p> Take a look at the <code>app/</code> directory to add or change tabs, update any existing page or create new pages. </p> </ion-content>
  • 53. page1.ts import {Page} from 'ionic-angular'; @Page({ template: ` <ion-navbar *navbar> <ion-title>Tab 1</ion-title> </ion-navbar> <ion-content padding class="page1"> <h2>Welcome to Ionic!</h2> <p> This starter project comes with simple tabs-based layout for apps that are going to primarily use a Tabbed UI. </p> </ion-content>` }) export class Page1 { constructor() {} }
  • 54. page1.ts import {Page} from 'ionic-angular'; @Page({ styles: [` .page1 h2 { color: red; } `], template: `...` }) export class Page1 { constructor() {} }
  • 55. Angular 1 vs Angular 2 ● bootstrap manuel ● Filter => Pipe ● Controllers => Components ● Directives => Components ● $scope => Class properties ● Services => Injectables
  • 56. Template ● Bindings : ● Pipes : ● Propriétés / Input : ● Evénements / Output : ● Double binding : ● Templates : ● Local variables : ● Boucles : Your favorite hero is: {{favoriteHero}} <span>{{movie.title | uppercase}}</span> <a [href]="angularDocsUrl">Angular Docs</a> <button (click)="toggleMovie()"></button> <input [(ngModel)]="favoriteMovie" /> <div *ngIf="movies.length === 0">No movies</div> <video-player #player></video-player> <button (click)="player.pause()">Pause</button> <ul *ngFor="let movie of movies"> <li>{{movie.title}}</li> </ul>
  • 59. todo.page.ts todo.html todo.scss import {Page} from 'ionic-angular'; @Page({ templateUrl: 'build/pages/todo/todo.html' }) export class TodoPage { constructor() { } } <ion-navbar *navbar> <ion-title>Todos</ion-title> </ion-navbar> <ion-content class="todo-page"> </ion-content> .todo-page { .done { text-decoration: line-through; } }
  • 60. import {App, Platform} from 'ionic-angular'; import {StatusBar} from 'ionic-native'; import {TabsPage} from './pages/tabs/tabs'; import {TodoPage} from "./pages/todo/todo.page"; @App({ template: '<ion-nav [root]="rootPage"></ion-nav>', config: {} }) export class MyApp { rootPage: any = TodoPage; constructor(platform: Platform) { platform.ready().then(() => { StatusBar.styleDefault(); }); } } // http://ionicframework.com/docs/v2/theming/ // App Shared Imports // -------------------------------------------------- // These are the imports which make up the design of this app. // By default each design mode includes these shared imports. // App Shared Sass variables belong in app.variables. scss. @import "../pages/page1/page1"; @import "../pages/page2/page2"; @import "../pages/page3/page3"; @import "../pages/todo/todo"; app.ts theme/app.core.scss
  • 61. Ionic2 TODO list import {Page} from 'ionic-angular'; class Todo { constructor( public name: string, public done: boolean = false ) {} } @Page({ templateUrl: 'build/pages/todo/todo.html' }) export class TodoPage { constructor() { } } <ion-navbar *navbar> <ion-title>Todos</ion-title> </ion-navbar> <ion-content class="todo-page"> </ion-content>
  • 62. Ionic2 TODO list import {Page} from 'ionic-angular'; class Todo { constructor( public name: string, public done: boolean = false ) {} } @Page({ templateUrl: 'build/pages/todo/todo.html' }) export class TodoPage { todos: Todo[] = [ new Todo('todo 1'), new Todo('todo 2'), new Todo('todo 3') ]; constructor() { } } <ion-navbar *navbar> <ion-title>Todos</ion-title> </ion-navbar> <ion-content class="todo-page"> </ion-content>
  • 63. Ionic2 TODO list <ion-navbar *navbar> <ion-title>Todos</ion-title> </ion-navbar> <ion-content class="todo-page"> <ion-list> <ion-item *ngFor="let todo of todos" [hidden]="todo.done"> <ion-label>{{todo.name}}</ion-label> <ion-checkbox [(ngModel)]="todo.done"></ion-checkbox> </ion-item> <ion-item *ngFor="let todo of todos" [hidden]="!todo.done"> <ion-label class="done">{{todo.name}}</ion-label> <ion-checkbox [(ngModel)]="todo.done" disabled="true"></ion-checkbox> </ion-item> </ion-list> </ion-content>
  • 64. Ionic2 TODO list import {Page} from 'ionic-angular'; @Page({ templateUrl: 'build/pages/todo/todo.html' }) export class TodoPage { newTodo: string = ''; todos: Todo[] = [ new Todo('todo 1'), new Todo('todo 2'), new Todo('todo 3') ]; constructor() { } create(text: string): void { this.todos.push(new Todo(text)); this.newTodo = ''; } } <ion-navbar *navbar> <ion-title>Todos</ion-title> </ion-navbar> <ion-toolbar> <ion-input type="text" [(ngModel)]="newTodo" placeholder="Nouvelle tâche"> </ion-input> <ion-buttons end> <button (click)="create(newTodo)"> <ion-icon name="send"></ion-icon> </button> </ion-buttons> </ion-toolbar> <ion-content class="todo-page"> <ion-list> ... </ion-list> </ion-content>
  • 65. Ionic2 TODO list import {Page} from 'ionic-angular'; @Page({ templateUrl: 'build/pages/todo/todo.html' }) export class TodoPage { newTodo: string = ''; todos: Todo[] = [...]; constructor() { } create(text: string): void { ... } delete(todo: Todo): void { const i = this.todos.indexOf(todo); if(i >= 0) { this.todos.splice(i, 1); } } } <ion-navbar *navbar> <ion-title>Todos</ion-title> </ion-navbar> <ion-toolbar> ... </ion-toolbar> <ion-content class="todo-page"> <ion-list> <ion-item *ngFor="let todo of todos" [hidden]="todo.done"> <ion-label>{{todo.name}}</ion-label> <ion-checkbox [(ngModel)]="todo.done"></ion-checkbox> </ion-item> <ion-item *ngFor="..." [hidden]="!todo.done" (click)="delete(todo)"> <ion-label class="done">{{todo.name}}</ion-label> <ion-checkbox [(ngModel)]="todo.done" disabled="true"></ion-checkbox> </ion-item> </ion-list> </ion-content>
  • 66. Ionic2 TODO list import {Page} from 'ionic-angular'; @Page({ templateUrl: 'build/pages/todo/todo.html' }) export class TodoPage { newTodo: string = ''; todos: Todo[] = [...]; constructor() { } create(text: string): void { ... } delete(todo: Todo): void { const i = this.todos.indexOf(todo); if(i >= 0) { this.todos.splice(i, 1); } } } <ion-navbar *navbar> <ion-title>Todos</ion-title> </ion-navbar> <ion-toolbar> ... </ion-toolbar> <ion-content class="todo-page"> <ion-list> <ion-item *ngFor="let todo of todos" [hidden]="todo.done"> <ion-label>{{todo.name}}</ion-label> <ion-checkbox [(ngModel)]="todo.done"></ion-checkbox> </ion-item> <ion-item *ngFor="..." [hidden]="!todo.done" (click)="delete(todo)"> <ion-label class="done">{{todo.name}}</ion-label> <ion-checkbox [(ngModel)]="todo.done" disabled="true"></ion-checkbox> </ion-item> </ion-list> </ion-content>
  • 68. Pour tester ce weekend...
  • 69. Pour tester ce weekend... http://ionicframework.com/docs/v2/ https://github.com/driftyco/ionic-conference-app https://github.com/saloonapp/saloon-app http://mcgivery.com/15-ionic-framework-2-resources/ (60+ maintenant…) https://angular.io/docs/ts/latest/cookbook/ https://forum.ionicframework.com/ http://loic.knuchel.org/blog/