Lær hvordan du lager din første Angular-app på 20 minutter

Angular er et JavaScript-rammeverk, opprettet min Misko Hevery og vedlikeholdt av Google. Det er en MVC (Model View Vontroller). Du kan besøke den offisielle siden for å lære mer om det.

Akkurat nå er den siste versjonen av Angular 5.2.10. Det er første generasjon 1.x og andre generasjon 2.x, og de to generasjonene er helt forskjellige i sine strukturer og metoder. Ikke bekymre deg hvis du føler deg forvirret om versjonen, for i denne artikkelen bruker vi andre generasjon 2.x

Innholdsfortegnelse

  • Legge til et element (lær hvordan du sender inn et skjema i Angular)
  • Fjerner et element (lær hvordan du legger til en hendelse i Angular)
  • Vinkelanimasjon (lær hvordan du animerer komponentene)

Forutsetninger:

  • Node.js

Sjekk om node.js er installert på datamaskinen din. Lær mer om installasjon.

  • npm

npm (node ​​package manager) er installert med Node.js

Sjekk node.js- versjonen:

node -v

npm:

npm -v

Vinkel-CLI

Du bør ha den nyeste versjonen av Angular-CLI. Lær mer om Angular CLI her , og finn instruksjonene for installasjon.

Installer Angular-cli:

npm install -g @angular/cli

Og til slutt, du burde ha:

  • Grunnleggende kunnskap om JavaScript
  • HTML og CSS grunnleggende

Du trenger ikke ha kunnskap om Angular.

Nå som vi har miljøet til å kjøre vår Angular-app, la oss komme i gang!

Opprette vår første app

Vi vil bruke vinkel-cli til å lage og generere komponentene våre. Det vil generere tjenester, rutere, komponenter og direktiver.

For å lage et nytt Angular-prosjekt med Angular-cli, er det bare å kjøre:

ng new my-app

Prosjektet blir generert automatisk. La oss lage vår oppgaveapp!

ng new todo-app

Åpne deretter filene i tekstredigeringsprogrammet. Jeg bruker sublim tekst, men du kan velge hvilken som helst redaktør.

Slik ser appstrukturen ut:

Ikke bekymre deg hvis du er forvirret om filene. Alt vårt arbeid vil være i app -mappen. Den inneholder fem filer:

Merk: Angular 2 bruker TypeScript , der filer slutter med " .ts" -utvidelsen.

For å lage et fint grensesnitt for appen vår, vil vi bruke Bootstrap 4 Framework.

Inkluder bootstrap cdn i index.html :

Kjør appen i terminalen din:

ng serve

Appen kjører i // localhost: 4200 /

Alt er bra ?!

La oss nå gjøre noen HTML-strukturer. Vi vil bruke Bootstrap-klasser for å lage et enkelt skjema.

app.component.html :

Todo App

Add

I app.component.css :

body{ padding: 0; margin: 0;
}form{ max-width: 25em; margin: 1em auto;}

For å fange inngangsverdien i Angular 2, kan vi bruke ngModel- direktivet. Du kan sette inn en variabel som attributt inne i inngangselementet.

For å opprette en variabel som attributt, bruk # etterfulgt av variabelens navn.

// get the value of the Variable

{{myVariable.value}}

Nå får du "todo" variabelverdien:

{{todo.value}}

Alt er bra ?!

Nå må vi lagre verdien fanget fra inngangen. Vi kan opprette en tom matrise i app.component.ts i AppComponent-klassen:

export class AppComponent { todoArray=[] }

Så må vi legge til en klikkhendelse på knappen vår som skyver verdien som er fanget inn i “ todoArray ”.

app.component.html :

Add

I app.component.ts :

export class AppComponent { todoArray=[]
addTodo(value){ this.todoArray.push(value) console.log(this.todos) } }
Bruk console.log (this.todoArray) for å se Array-verdi

Hent data fra “todoArray”

Now we have to fetch data stored in “todosArray.” We will use the *ngFor directive to loop through the array and extract the data.

app.component.html:


    
  • {{todo}}

After fetching data:

The data will now be fetched automatically when we click the add button.

Styling the app

I like to use Google-fonts and Material-icons, which are free to use.

Include Google fonts inside app.component.css:

/*Google fonts*/@import url('//fonts.googleapis.com/css?family=Raleway');

And Material-icons inside index.html:

After adding some styling to our app, it will look like this:

To use Material icons:

iconName

Add “delete” and “add” icons in app.component.html:

// put add icon inside "input-group-text" div
add
// and delete icon inside list item 
  • {{todo}}delete
  • For styles in app.component.css:

    /*Google fonts*/@import url('//fonts.googleapis.com/css?family=Raleway');
    body{ padding: 0; margin: 0;
    }form{ max-width: 30em; margin: 4em auto; position: relative; background: #f4f4f4; padding: 2em 3em;}form h1{ font-family: "Raleway"; color:#F97300; }form input[type=text]::placeholder{ font-family: "Raleway"; color:#666; }form .data{ margin-top: 1em;}form .data li{ background: #fff; border-left: 4px solid #F97300; padding: 1em; margin: 1em auto; color: #666; font-family: "Raleway";}form .data li i{ float: right; color: #888; cursor: pointer;}form .input-group-text{ background: #F97300; border-radius: 50%; width: 5em; height: 5em; padding: 1em 23px; color: #fff; position: absolute; right: 13px; top: 68px; cursor: pointer;}form .input-group-text i{ font-size: 2em;}form .form-control{ height: 3em; font-family: "Raleway";}form .form-control:focus{ box-shadow: 0;}

    Our app is almost done, but we need to add some features. A delete functionality should let users click a delete icon and delete an item. It would also be great to have the option to enter a new item with the return key, instead of clicking the add button.

    Deleting items

    To add the delete functionality, we will use the “splice” array method and a for loop. We will loop through “todoarray” and extract the item we want to delete.

    Add a (click) event to delete icon and give it “todo” as parameter :

  • {{todo}} delete
  • In app.component.ts:

    /*delete item*/ deleteItem(){ console.log("delete item") }

    When you click delete, this should show up in the console:

    Now we have to loop through “todoArray” and splice the item we clicked.

    In app.component.ts:

    /*delete item*/ deleteItem(todo){ for(let i=0 ;i<= this.todoArray.length ;i++){ if(todo== this.todoArray[i]){ this.todoArray.splice(i,1) } } }

    The result:

    Awesome ?!!

    Entering to add items

    We can add a submit event to the form:

    (ngSubmit)="TodoSubmit()"

    We need to add the variable “#todoForm” to the form and give it “ngForm” as a value. In this case, we just have one field so we will just get a single value. If we have multiple fields, the submit event will return the values of all the fields in the form.

    app.component.html

    in app.component.ts

    // submit Form todoSubmit(value:any){ console.log(value) }

    Check the console. It will return an object of values:

    So now we have to push the returned value to “todoArray”:

    // submit Form todoSubmit(value:any){ if(value!==""){ this.todoArray.push(value.todo) //this.todoForm.reset() }else{ alert('Field required **') } }

    Here we are ?. The value is inserted without needing to click the add button, just by clicking “enter”:

    One more thing. To reset the the form after submitting, add the “resetForm()” build-in method to submit the event.

    The form will reset after each submit now:

    Adding animations

    I like to add a little touch of animations. To add animation, import the animations components in your app.component.ts:

    import { Component,trigger,animate,style,transition,keyframes } from '@angular/core';

    Then add the animations property to “@component” decorator:

    @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'], animations:[ trigger("moveInLeft",[ transition("void=> *",[style({transform:"translateX(300px)"}), animate(200,keyframes([ style({transform:"translateX(300px)"}), style({transform:"translateX(0)"}) ]))]),
    transition("*=>void",[style({transform:"translateX(0px)"}), animate(100,keyframes([ style({transform:"translateX(0px)"}), style({transform:"translateX(300px)"}) ]))]) ])
    ]})

    Now the items have a nice effect when they’re entered and deleted.

    All the code

    app.component.ts

    import { Component,trigger,animate,style,transition,keyframes } from '@angular/core';
    @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'], animations:[ trigger("moveInLeft",[ transition("void=> *",[style({transform:"translateX(300px)"}), animate(200,keyframes([ style({transform:"translateX(300px)"}), style({transform:"translateX(0)"}) ]))]),
    transition("*=>void",[style({transform:"translateX(0px)"}), animate(100,keyframes([ style({transform:"translateX(0px)"}), style({transform:"translateX(300px)"}) ]))]) ])
    ]})export class AppComponent { todoArray=[]; todo; //todoForm: new FormGroup()
    addTodo(value){ if(value!==""){ this.todoArray.push(value) //console.log(this.todos) }else{ alert('Field required **') } }
    /*delete item*/ deleteItem(todo){ for(let i=0 ;i<= this.todoArray.length ;i++){ if(todo== this.todoArray[i]){ this.todoArray.splice(i,1) } } }
    // submit Form todoSubmit(value:any){ if(value!==""){ this.todoArray.push(value.todo) //this.todoForm.reset() }else{ alert('Field required **') } } }

    app.component.html

    Todo App

    add
    • {{todo}} delete

    app.component.css

    /*Google fonts*/@import url('//fonts.googleapis.com/css?family=Raleway');
    body{ padding: 0; margin: 0;
    }form{ max-width: 30em; margin: 4em auto; position: relative; background: #f4f4f4; padding: 2em 3em; overflow: hidden;}form h1{ font-family: "Raleway"; color:#F97300; }form input[type=text]::placeholder{ font-family: "Raleway"; color:#666; }form .data{ margin-top: 1em;}form .data li{ background: #fff; border-left: 4px solid #F97300; padding: 1em; margin: 1em auto; color: #666; font-family: "Raleway";}form .data li i{ float: right; color: #888; cursor: pointer;}form .input-group-text{ background: #F97300; border-radius: 50%; width: 5em; height: 5em; padding: 1em 23px; color: #fff; position: absolute; right: 13px; top: 68px; cursor: pointer;}form .input-group-text i{ font-size: 2em;}form .form-control{ height: 3em; font-family: "Raleway";}form .form-control:focus{ box-shadow: 0;}

    We are done ?. You can find the files and code on Github.

    See the Demo

    Conclusion

    Angular is easier than you think. Angular is one of the best JavaScript libraries, and it has great support and a nice community. It also has tools that make working with Angular fast and easy, like Angular-cli.

    Subscribe to this mail-list to learn more about Angular.

    [email protected] (@hayanisaid1995) | Twitter

    The latest Tweets from [email protected] (@hayanisaid1995). #Web_Developer /#Frontend / #Back_end(#PHP &…twitter.com

    Here are some of the best online courses to learn Angular for free:

    Angular 1.x

    • Shaping with Angular
    • Learn Angular

    Vinkel 2.x (anbefalt)

    • lære Angular2 (coursetro)
    • YouTube-spilleliste