Skip to content

Modus-Logo-Long-BlackCreated with Sketch.

  • Services
  • Work
  • Blog
  • Resources

    OUR RESOURCES

    Innovation Podcast

    Explore transformative innovation with industry leaders.

    Guides & Playbooks

    Implement leading digital innovation with our strategic guides.

    Practical guide to building an effective AI strategy
  • Who we are

    Our story

    Learn about our values, vision, and commitment to client success.

    Open Source

    Discover how we contribute to and benefit from the global open source ecosystem.

    Careers

    Join our dynamic team and shape the future of digital transformation.

    How we built our unique culture
  • Let's talk
  • EN
  • FR

Creating Apps with Ionic 2

Published on March 2, 2016
Last Updated on April 8, 2021
Application Development

Ionic is a fantastic and established framework for creating hybrid mobile apps for both iOS and Android. Ionic 2 modernizes the framework leveraging Angular 2, TypeScript and Webpack. Ionic 2 also simplifies common UX paradigms like tabs and view navigation. I’m going to build a simplified Twitter-style app called Chatter to show off what’s new in Ionic 2. The code examples in this post are simplified from the full-source app available on GitHub.

Building the Base

Chatter uses a tab-based layout with three tabs. In Ionic 1, tab-based apps required complex router configurations. Ionic 2 eliminates that and uses a single ion-tabs component that maps a Page component to a tab. Tab bars can be text-only, icon-only or have both text and icon.

<ion-tabs>
  <ion-tab [root]="tabFeedView" tabIcon="chatboxes"></ion-tab>
  <ion-tab [root]="tabMeView" tabIcon="person"></ion-tab>
  <ion-tab [root]="tabPeopleView" tabIcon="people"></ion-tab>
</ion-tabs>

Creating Views

Views, or pages, in Ionic 2 are created using the @Page annotation. The annotation contains information about the template, directives and providers. A controller for a Page is just a TypeScript class. It contains all the logic and properties for your view. Class properties are automatically bound to this, including parameters that have private or public access modifiers in the constructor.

@Page({
  template: `
    <ion-content>
      <post-item *ngFor="#post of posts" [post]="post" />
    </ion-content>
  `,
  directives: [PostComponent]
})

export class FeedView {
  posts: Post[] = []

  constructor(private postService: PostService) {
    this.postService.allPosts().subscribe(posts => this.posts = posts)
  }
}

Building Components

Components are reusable elements that contain logic in Angular 2. In Chatter, the post item is a component. To create one, you’ll have to import Component from angular2/core. Components are very similar to pages since they both have an annotation describing the component and a class that defines the logic. To use Ionic components within your custom component you’ll have to import them as directives. Finally, data you wish to pass to components, like post, are class properties marked with the @Input attribute. To use a component you have to register it in the Page directive attribute as shown in the previous code example.

@Component({
  selector: 'post-item',
  template: `...`
})

export class PostComponent {
  @Input() post: Post

  constructor(private postService: PostService) { }

  toggleFavorite() {
    this.postService.toggleFavorite(this.user.uid, this.post)
  }
}

View Navigation

What’s great about Ionic 2 is view navigation doesn’t require any router configuration so views can be added and moved around easily. The people view in Chatter shows a list of people using the app. Selecting their name will show all the posts that person has composed. Ionic 2 takes care of the navigation stack, animations and back button operations. To push to a new view, all you have to do is import the child Page component on the parent view then use the navPush attribute. You can page data to the child view too.

<button [navPush]="[peopleDetailView, {user: user}]">Show Detail</button>

The navPush attribute is an array that takes the view as the first element then an array of data the child view will need.

Observables

A common challenge in apps is keeping data in sync across multiple views or components when it changes. Http in Angular 2 swaps out promises for observables for stream-based updates. Multiple views and components can subscribe to an observable so they’re kept in sync. A great use case for this is getting the current authenticated user. In Chatter, each tab wants to know the current user and react based on if the user exists and is authenticated.

function getUser() {
  http.get('/api/user/current').map(response => response.json())
}

...

userService.getUser().subscribe(user => this.user = user)

In Angular 2, you map the json response from Http which returns an Observable. Each of the tabs can subscribe to this observable and get real time updates when the user changes. This cleans up the spaghetti code or unperformant broadcasts from Angular 1.

Chatter also uses observables in conjunction with Firebase to ensure real time updates of posts to the view feeds.

Tooling

Ionic 2 fully leverages Webpack to build a complete module of your application. This replaces Gulp which was used in Ionic 1. The Ionic 2 CLI generates a Webpack config file for you that’s feature complete. As always, you can customize your config file to add any Webpack loaders and plugins you might want to use.

Final Thoughts

Ionic 2 is an evolutionary step from Ionic 1 that reduces the amount of code and polishes the user interface. The full catalogue of Ionic components on iOS and Android feel and look even more native than Ionic 1. Angular 2 brings huge performance increases and neat things like observables to make your app more dynamic and responsive. I encourage you to take a look at the full source of Chatter to see an example app that has live real-time data.

Posted in Application Development
Share this

Carlos Paelinck

Carlos Paelinck is a web and Apple platforms developer. He attends and speaks at the Angular and JavaScript meetups in Omaha, NE. Carlos enjoys his dog, gin cocktails, golf and Nebraska Cornhuskers football. During his time with Modus Create, Carlos filled the role of Software Engineer.
Follow

Related Posts

  • Building Better Ionic Apps with Ionic Pro
    Building Better Ionic Apps with Ionic Pro, Part 2

    In Part 1 of this series, we created a rapid prototype using Ionic Creator. In…

  • Building Better Ionic Apps with Ionic Pro
    Building Better Ionic Apps with Ionic Pro, Part 4

    Ionic Deploy is a really powerful tool and highly recommended for hot updates and managing…

Want more insights to fuel your innovation efforts?

Sign up to receive our monthly newsletter and exclusive content about digital transformation and product development.

What we do

Our services
AI and data
Product development
Design and UX
IT modernization
Platform and MLOps
Developer experience
Security

Our partners
Atlassian
AWS
GitHub
Other partners

Who we are

Our story
Careers
Open source

Our work

Our case studies

Our resources

Blog
Innovation podcast
Guides & playbooks

Connect with us

Get monthly insights on AI adoption

© 2025 Modus Create, LLC

Privacy PolicySitemap
Scroll To Top
  • Services
  • Work
  • Blog
  • Resources
    • Innovation Podcast
    • Guides & Playbooks
  • Who we are
    • Our story
    • Careers
  • Let’s talk
  • EN
  • FR