Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AngularJS & TypeScript: The Beginning of an awesome Friendship?

AngularJS & TypeScript: The Beginning of an awesome Friendship?

Do Angular and TypeScript play together nicely? This slide deck gives a very brief introduction to both and answers the question.

Kai Toedter

July 29, 2015
Tweet

More Decks by Kai Toedter

Other Decks in Technology

Transcript

  1. TypeScript & AngularJS The Beginning of an awesome Friendship? Kai

    Tödter 11/5/2016 1 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License.
  2. Who am I?  Senior Software System Architect at Siemens

    Building Technologies  Web Technology Fan  Open Source Lover  E-mail: [email protected]  Twitter: twitter.com/kaitoedter  Google+: gplus.to/toedter  Blog: toedter.com/blog 11/5/2016 2 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License.
  3. Show Hands! 11/5/2016 © Kai Tödter, Licensed under a Creative

    Commons Attribution 4.0 International License. 3
  4. Outline  TypeScript Introduction  AngularJS Introduction  TypeScript +

    AngularJS  Demos & Live Coding  Friends or Foes? 11/5/2016 4 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License.
  5. JavaScript? Many Java/OO developers don’t like JavaScript regarding writing larger

    applications. Some reasons are:  No static typing  No reliable code completion (only best guess)  Hard to refactor  Not object-oriented, especially  No structuring mechanisms like Interfaces, Classes, Modules  … 11/5/2016 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 6
  6. Who fixes that?  Dart  Great language by Google:

    dartlang.org  Team has to learn new language  Either runs on Dart VM or compiles to JavaScript  CoffeeScript  Ruby-like, concise syntax  Compiles to JavaScript  coffescript.org  BabelJS  JavaScript compiler  babeljs.io  Traceur  JavaScript compiler  github.com/google/traceur-compiler 11/5/2016 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 7
  7. TypeScript: Summary  Typed Superset of JavaScript  Almost all

    valid JavaScript is valid TypeScript*  Compiles to JavaScript  Provides optional static type checking at compile time  For most existing JavaScript libraries there are type definitions available  Provides Interfaces, Classes, Modules, Enums, Generics and more  Open Source: Apache 2.0 License  Created by Microsoft 11/5/2016 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 8
  8. How to get started?  www.typescriptlang.org  Install node.js (nodejs.org)

     Invoke “npm install –g typescript”  Compile a TypeScript file: “tsc myTypeScript.ts”  Results in “myTypeScript.js” 11/5/2016 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 9
  9. Play! 11/5/2016 © Kai Tödter, Licensed under a Creative Commons

    Attribution 4.0 International License. 11
  10. Definitely Typed 11/5/2016 © Kai Tödter, Licensed under a Creative

    Commons Attribution 4.0 International License. 12
  11. (Internal) Modules and Interfaces module cdemo { export interface Contact

    { getFirstName(): string; getLastName(): string; getEMail(): string; } } 11/5/2016 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 13
  12. Classes module cdemo { export class SimpleContact implements Contact {

    constructor(private firstName:string, private lastName:string, private email:string) { } getFirstName():string { return this.firstName; } 11/5/2016 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 14
  13. AngularJS  Superheroic JavaScript MVW Framework  MVW = Model

    View Whatever   Modules, controllers, services, factories, …  Data binding  Created by Google  Much more… 11/5/2016 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 17
  14. Hello Angular <!doctype html> <html ng-app> <body> <div> <label>Name:</label> <input

    type="text" ng-model="yourName" placeholder="Enter a name here"> <hr> <h1>Hello {{yourName}}!</h1> </div> <script src="../../../bower_components/angular/angular.min.js"></script> </body> </html> 11/5/2016 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 18
  15. Module + Controller var myApp = angular.module('myApp',[]); myApp.controller('ConferencesController', ['$scope', function($scope)

    { $scope.conferences = [ {'name':'WJAX', 'year':'2014', 'location':'Munich'}, {'name':'OOP', 'year':'2015', 'location':'Munich'}, {'name':'JAX', 'year':'2015', 'location':'Munich'}, {'name':'JavaOne', 'year':'2015', 'location':'San Francisco'}, ]; }]); 11/5/2016 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 19
  16. Loops + Filters <label>Search:</label> <input type="text" ng-model="search" placeholder="Enter search here">

    <hr> <table ng-controller="ConferencesController"> <tr ng-repeat="conf in conferences | filter:search"> <td>{{conf.name}}</td> <td>{{conf.year}}</td> <td>{{conf.location}}</td> </tr> </table> 11/5/2016 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 20
  17. Live Demo https://github.com/toedter/chatty 11/5/2016 © Kai Tödter, Licensed under a

    Creative Commons Attribution 4.0 International License. 21
  18. AngularJS + TypeScript 11/5/2016 © Kai Tödter, Licensed under a

    Creative Commons Attribution 4.0 International License. 22
  19. Use Type Definitions  From https://github.com/borisyankov/DefinitelyTyped/ tree/master/angularjs  angular.d.ts 

    angular-resource.d.ts  … 11/5/2016 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 23
  20. Main App Structure module chatty { export var app =

    angular.module('chatty', ['chatty.factories', 'chatty.controllers', 'chatty.services']); export var factories = angular.module('chatty.factories', ['ngResource']); export var services = angular.module('chatty.services', ['chatty.factories']); export var controllers = angular.module('chatty.controllers', []); } 11/5/2016 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 24
  21. Define your Own Scope interface ChattyScope extends ng.IScope { isConnected

    : boolean; userId : string; userEmail : string; userFullName : string; … } 11/5/2016 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 25
  22. DI in TypeScript Classes module chatty { export class MainController

    { static $inject = ['$scope', 'chatty.userService']; constructor($scope:ChattyScope, userService:UserService) { $scope.isConnected = false; … 11/5/2016 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 26
  23. REST Resources (Model) module chatty.model { export interface User {

    id: string; email: string; fullName: string; } export interface UserResource extends User, ng.resource.IResource<User> { } export interface UsersResource extends ng.resource.IResourceClass<UserResource> { } } 11/5/2016 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 27
  24. REST Resources (Factory) chatty.factories.factory('usersResource', ['$resource', ($resource: ng.resource.IResourceService) : chatty.model.UsersResource =>

    { var usersResource:chatty.model.UsersResource = <chatty.model.UsersResource> $resource('http://localhost:8080/chatty/api/users/:id'); return usersResource; }]); 11/5/2016 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 28
  25. Simple TypeScript Service Component export class ServiceComponent { private name:

    string; constructor() { this.name = 'test service'; } public getServiceName(): string { return this.name; } } 11/5/2016 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 30
  26. Angular2 Preview import {Component, View, bootstrap} from 'angular2/angular2'; import {ServiceComponent}

    from './services/service'; @Component({ selector: 'my-app', viewInjector: [ServiceComponent] }) @View({ template: '<h1>Hello {{ name }}</h1><h1>Service: {{ serviceName }}</h1>' }) class AppComponent { private name: string; private serviceName: string; constructor(private service:ServiceComponent) { this.name = 'Kai'; this.serviceName = service.getServiceName(); } } bootstrap(AppComponent); 11/5/2016 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 31
  27. Live Demo 11/5/2016 © Kai Tödter, Licensed under a Creative

    Commons Attribution 4.0 International License. 32 https://github.com/toedter/typescript-contacts-demo https://github.com/toedter/chatty https://github.com/toedter/webapp-tutorial https://github.com/toedter/angular2-typescript-demo
  28. Conclusion 11/5/2016 © Kai Tödter, Licensed under a Creative Commons

    Attribution 4.0 International License. 33 AngularJS + TypeScript + AngularJS TypeDefinitions ------------------------------------- Good Friends!
  29. License  This work is licensed under a Creative Commons

    Attribution 4.0 International License.  See http://creativecommons.org/licenses/by/4.0/ 11/5/2016 © Kai Tödter, Licensed under a Creative Commons Attribution 4.0 International License. 35