A DAY WITH IONIC

JavaScript Basics

  • Arrow functions
  • Array map
  • Array filter
  • Spread Operator

Arrow Functions

Javascript is a functional programming language, and functions can be written in many different ways.

Array Map

The map() method creates a new array with the results of calling a provided function on every element in the calling array.

 

Array Filter

The filter() method creates a new array with all elements that pass the test implemented by the provided function.

Spread Syntax

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi nec metus justo. Aliquam erat volutpat.

Creating Your First Project

cd ~

mkdir -p projects/ionic

Mac

cd projects/ionic

Windows

cd %userprofile%

mkdir projects/ionic

cd projects/ionic

ionic start TaskList --type=angular

template: blank

cordova: yes

ionic pro: no

Angular

The Ultimate Framework

What We'll Cover

  • App Structure
  • Directives
  • Components
  • Property Binding
  • Event Binding
  • Structural Directives
    • ngIf - conditional
    • ngFor - loops

What is Angular?

  • Angular is a JavaScript framework, along with a set of tools built specifically for the framework, that enables creation of complex web applications with relative ease.

Structure of an Angular Project

Containers and Components

 

The Angular framework has no concept of a Container, it only knows Modules and Components.

Thinking in terms of Container and Components  provides us a useful mental model for distributing data in our app.

Directives

There are 3 kinds of directives in Angular:

  • Components
  • Attribute Directives
  • Structural Directives

Components

  • Directives with a template
  • The most common of the three directives
  • Is used in your HTML like a native element

Directive #1

As if it were its own website, every component typically has 3 files. 

  • Template - HTML
  • Style - SCSS or CSS
  • Controller/Class - TypeScript

The controller for a component is simply a JavaScript class Decorated with the Component Decorator provided by Angular

Once created, the component can be used in other components as if it were a native HTML element

Data Binding

Angular gives us 4 ways to easily manipulate data in the template and you will use them heavily when developing in Angular and Ionic

  • [data] - Property binding
  • (event) - Event Binding
  • [(ngModel)] - Two-Way Binding
  • {{string}} - interpolation

Property Binding

When you what to input data into a component, or you want an attribute to vary based on some outside condition

Event Binding

How a parent component listens to events or Output from a child component. 

Two-Way Binding

When an element has a directive that emits a value and receives a value, you can use Two-Way Data Binding

Remember "Banana in a box"

Interpolation

Allows you to bind a string value from a variable in your TypeScript code to your template for dynamic text changes

Attribute Directives

Changes the appearance or behavior of an element, component, or another directive

Directive #2

When used in a template a custom directive looks just like a regular HTML attribute.

When building the page, Angular will see our custom directive and initialize the corresponding class we've created for it

This is what the class for that directive might look like. It is annotated with Angular's Directive Decorator and given a selector of our choosing

Structural Directives

What Angular uses to restructure the DOM, typically by adding, removing, or manipulating elements.

As with other directives, you apply a structural directive to a host element. The directive then does whatever it's supposed to do with that host element and its descendants.

 

Directive #3

A structural directive is easily recognized because of​ the asterisk (*) that precedes the directive attribute name

ngIf

Allows you to easily control which HTML elements are loaded using conditional statements.

ngFor

Loops through all the elements of a given array and allows all elements nested inside the parent element to be displayed once for each array item.

Nesting Structural Directives

Structural Directives (ie ngFor and ngIf) can be nested inside of each other to create complex UI logic. 

Ionic

Cross-platform app development with one code base

 

What We'll Cover

  • Pages 
  • Components
    • ion-toggle
    • ion-input
    • ion-textarea

Ionic Page

Pages in Ionic are components that serve as functional pages of the app you are creating. Navigating between page will invoke a native-like transition.

In Ionic 2 and 3, a page needed to be decorated with the @IonicPage Decorator. Now a page is just a component with it's own module, and when the router loads that module the components and services associated with it are loaded

Ionic Components

Ionic Components are set of UI components along with directives to easily control them through code

Before Ionic 4, Ionic Components were built using Angular's Component system. They are being remade into Web Components to be more framework agnostic

ion-checkbox

A handy component provided by Ionic out-of-the-box that provides a the ability to make binary decisions

ion-input

A commonly used component provided by ionic that acts as a wrapper for the HTML input element, adding styles and functionality tailored for the Ionic framework

 

ion-textarea

A custom Angular Directive developed by Ionic that wraps the native textarea HTML element

ion-textarea cont.

Ionic also provides the Attribute Directive autosize which forces the textarea to resize automatically and allows the user to adjust the size manually

Handling Events

Passing data to and from components

EventEmitter

  • how Child Components communicate with Container Components
  • wrapper for Subject, which holds an array of Observer functions and executes them whenever emit is called

Input

Giving data to a Child "Dumb" Component in Angular involves creating a property with the @Input decorator in the class file. 

The property name you create will then be available as a property of the Component's HTML selector. The item 

Output

Children Components can allow access to particular data using the @Output decorator.

The Output data is then available as an event that can be bound to with a function using Angular's event binding.

Made with Slides.com