AngularJS vs Angular [chiuso]


159

Mesi fa, ho deciso di studiare angolare. Quando stavo facendo un po 'di anticipo e ho creato un'app usando, mi rendo conto che Angular 2 è nell'anteprima dello sviluppatore, quindi è una questione di tempo prima che venga rilasciato. Poiché Angular 2 non sarà compatibile con Angular 1 e ci sono molti cambiamenti, la domanda è: è meglio continuare a sviluppare con Angular 1.x o iniziare a sviluppare Angular 2?

È un dato di fatto che non dobbiamo sempre utilizzare l'ultima versione né la lingua più recente sul mercato, ma in questo caso l'app è ancora piccola, quindi potrei cambiare senza problemi.


1
Proverei prima con 1 angolare. Esistono toni delle soluzioni e molte risposte a molte domande. Probabilmente l'angolo 1.5 sarà un ponte su 2. L'angolo 2 apparirà ancora un po 'come l'angolo 1, quindi proverei 1, perché non esiste una data specifica in cui 2 sarà pronto per la produzione.
ssuperczynski,



80
StackOverflow ha lasciato un vuoto per Quora. Tutte queste domande che sono chiuse come basate sull'opinione o che non si adattano bene ora vengono visualizzate su Quora e su un motore di ricerca superiore rispetto allo stackoverflow. Piuttosto vergogna Non vedo nulla di male nel chiedere una simile domanda su SO in cui la tecnologia ha una profondità e un'ampiezza così grandi. Tutti noi siamo messi alla prova con tali domande ogni giorno, raccogliendo l'una sull'altra cosa. consentiamo di porre e rispondere a domande autentiche.
Priyank,

Utilizzare il nome AngularJS per qualsiasi versione 1.xe Angular per qualsiasi versione 2+. Consulta le Linee guida per il branding per Angular e AngularJS .
georgeawg,

Risposte:


157

Permettetemi di prefazione dicendo: presumo che voi e tutti coloro che leggeranno questo sia già comodamente con Angular 1 ( ora indicato come AngularJS , anziché semplicemente Angular per le versioni più recenti). Detto questo, entriamo in alcune delle aggiunte e differenze chiave in Angular 2+.

  1. Hanno aggiunto un angolo cli.

È possibile avviare un nuovo progetto eseguendo ng new [app name]. Puoi servire il tuo progetto eseguendo ng serve ulteriori informazioni qui: https://github.com/angular/angular-cli

  1. Il tuo codice angolare è scritto in Typescript ES6 e si compila in fase di esecuzione in Javascript nel browser.

Per avere una comprensione completa di questo, ti consiglio di dare un'occhiata all'elenco delle risorse che ho in fondo alla mia risposta.

  1. Struttura del progetto

In una struttura di base, avrai una app/tscartella in cui eseguirai la maggior parte del tuo lavoro e app/jstroverai nei app/jsfile delle cartelle .js.mapun'estensione. Esse "mappano" i file ".ts" sul browser per il debug poiché il browser non è in grado di leggere il dattiloscritto nativo.

Aggiornamento : è fuori beta. La struttura del progetto è cambiata un po ', nella maggior parte dei casi e se stai usando la clip angolare, lavorerai nella src/app/cartella. In un progetto iniziale, avrai quanto segue.

app.component.css 
app.component.html
app.component.spec.ts
app.component.ts 
app.module.ts
index.ts

app.component.css : file CSS che dovresti usare specifico percomponent.html

app.component.html : una vista (variabile dichiarata in app.component.js)

app.component.spec.ts : utilizzato per i testapp.component.ts

app.component.ts : il tuo codice a cui si legaapp.component.html

app.module.ts : questo è ciò che dà il via alla tua app e dove definisci tutti i plugin, componenti, servizi, ecc. Questo è l'equivalente di app.jsin Angular 1

index.ts utilizzato per definire o esportare i file di progetto

Ulteriori informazioni:
Suggerimento Pro: è possibile eseguire ng generate [option] [name]per generare nuovi servizi, componenti, tubi, ecc.

Anche il tsconfig.jsonfile è importante in quanto definisce le regole di compilazione TS per il tuo progetto.

Se stai pensando che devo imparare una lingua completamente nuova? ... Uh ... kinda, TypeScript è un superset di JavaScript. Non essere intimidito; è lì per facilitare il tuo sviluppo. Mi è sembrato di averne una buona conoscenza dopo poche ore di gioco, e dopo 3 giorni ho avuto tutto giù.

  1. Ti leghi al tuo HTML in modo simile a come faresti con una direttiva Angular 1. Così variabile come $scopee $rootScopesono stati deprecati.

Questo potrebbe essere stato implicito. Angular 2 è ancora un MV * ma utilizzerai ' componenti ' come un modo per associare il codice ai tuoi modelli, ad esempio, prendi il seguente

    import { Component } from '@angular/core';

    @Component({
         selector:'my-app',
         template: '<h1> Hello World! </h1>'
    })

    export class AppComponent {}

Qui pensa importall'affermazione come alla tua iniezione di dipendenza in un controller v1. Usi importper importare i tuoi pacchetti, dove import {Component}dice che farai un componentche vorresti associare al tuo HTML.

Nota il @Componentdecoratore che hai un selectore template. Qui pensa a selectorcome il tuo $scopeche usi come usi v1 directivesdove il nome di selectorè quello che usi per associarti al tuo HTML in questo modo

<my-app> </my-app>

Dov'è <my-app>il nome del tag personalizzato che utilizzerai che fungerà da segnaposto per quanto dichiarato nel tuo modello. cioè) <h1> Hello World! </h1>. Considerando che questo sarebbe simile al seguente in v1:

HTML

<h1>{{hello}}</h1>

JS

$scope.hello = "Hello World!"

Puoi anche aggiungere qualcosa tra questi tag per generare un messaggio di caricamento, come questo:

<my-app> Loading... </my-app> 

Quindi verrà visualizzato " Caricamento in corso ... " come messaggio di caricamento.

Nota che ciò che è dichiarato templateè il percorso o il codice HTML non elaborato che utilizzerai HTMLnel tuo selectortag.


Un'implementazione più completa di Angular 1 sarebbe più simile a questa:

HTML

<h1 ng-controller="myCtrl">{{hello}}</h1>

In v1 questo sarebbe simile

JS

angular.module('controller', [])



.controller('myCtrl', function( $scope) {
    $scope.hello = "Hello World!"
})

Questo è quello che mi piace davvero di v2. Ho scoperto che la direttiva era una curva di apprendimento ripida per me nella v1 e anche quando le avevo capite spesso avevo il CSSrendering non come volevo. Trovo che sia molto più semplice.

V2 consente una più facile scalabilità della tua app poiché puoi dividere la tua app più facilmente di quanto potresti fare in v1. Mi piace questo approccio poiché puoi avere tutte le tue parti di lavoro in un file invece di averne diverse in angolare v1.

Che ne dici di convertire il tuo progetto da v1 a v2?


Da quello che ho sentito dal team di sviluppo se desideri aggiornare il tuo progetto v1 a v2, passerai semplicemente attraverso l'eliminazione di BLOB obsoleti e sostituirai le tue $scopes con selectors. Ho trovato utile questo video. È con alcuni membri del team ionico che stanno lavorando fianco a fianco con il team angolare poiché v2 si concentra maggiormente sul mobile https://youtu.be/OZg4M_nWuIk Spero che questo aiuti.

AGGIORNAMENTO: ho aggiornato aggiungendo esempi mentre le implementazioni ufficiali di Angular 2 sono emerse.

AGGIORNAMENTO 2: Questa sembra essere ancora una domanda popolare, quindi ho pensato che avrei trovato una risorsa che ho trovato molto utile quando ho iniziato a lavorare con Angular 2.

Risorse utili:

Per ulteriori informazioni su ES6, ti consiglio di dare un'occhiata ai tutorial sulle nuove funzionalità ECMAScript 6 / ES6 di New Boston - Playlist di YouTube

Per scrivere le funzioni di Typescript e vedere come vengono compilate in Javascript, controlla il campo di gioco in lingua Typescript

Per vedere una funzione per suddivisione della funzione di ciò che è l'equivalenza angolare 1 in Angolare 2 vedere Angular.io - Cookbook -A1 A2 Guida rapida


Se mantengo Angular 1 e 2 entrambi sulla stessa app, avrò un incremento delle prestazioni di 5 volte nel rendering delle pagine in cui Angular 2 ha abilitato le pagine?
Sampath,

1
@Sampath Dubito che ci sia un notevole cambiamento delle prestazioni nel 99% di tutte le app. AFAIK i concetti dietro A2 sono gli stessi di A1, solo la sintassi è leggermente cambiata.
Hubert Grzeskowiak il

Questo è un buon confronto breve e conciso. Lo aggiungerò ai segnalibri come riferimento rapido. più uno da me
Fouad Boukredine,

39

Potrebbe aiutarti a capire il confronto tra Angolare 1 e Angolare 2.

Angular 2 ha dimostrato di avere molti vantaggi rispetto a Angular 1:

  • È interamente basato su componenti.
  • Migliore rilevamento delle modifiche
  • La compilazione Ahead of Time (AOT) migliora la velocità di rendering.
  • TypeScript viene utilizzato principalmente per lo sviluppo di applicazioni Angular 2.
  • Angular 2 ha prestazioni migliori rispetto a Angular 1.
  • Angular 2 ha un sistema di templating più potente di Angular 1.
  • Angular 2 ha API più semplici, caricamento lento, debug più semplice.
  • Angular 2 è molto più testabile di Angular 1.
  • Angular 2 fornisce componenti nidificati.
  • Angular 2 fornisce un modo per eseguire più di due sistemi insieme.
  • E così via...

1
Per quanto riguarda le prestazioni, ci sono test per il confronto? Inoltre, in quale SPA si colloca la performance al 1 ° posto? I componenti nidificati sono disponibili anche in A1. Non ho idea di cosa intendi per ultimo punto, ma AFAIK puoi avere più app ng su una pagina
Hubert Grzeskowiak

1
Angular 2 ha prestazioni migliori di Angular 1. Questo è completamente sbagliato, dimostralo con alcuni benchmark pertinenti;)
amdev

2
Dicci, come è sbagliato? :) e la tua risposta è qui per problemi di prestazioni in Angular 1. quirksmode.org/blog/archives/2015/01/the_problem_wit.html
Anil Singh

16

Angular 2 e Angular 1 sono fondamentalmente un framework diverso con lo stesso nome.

angular 2 è più pronto per lo stato attuale degli standard web e lo stato futuro del web (ES6 \ 7, immutiablity, componenti, shadow DOM, operatori del servizio, compatibilità mobile, moduli, dattiloscritto e così via ...)

angular 2 ha ucciso molte caratteristiche principali di angular 1 like: controller, $ scope, direttive (sostituite con annotazioni @component), la definizione del modulo e molto altro, anche le cose semplici come ng-repeat non hanno lasciato le stesse.

in ogni caso, il cambiamento è buono, 1.x angolare ha avuto difetti, e angolare 2 è più pronto per i futuri requisiti del web.

per riassumere le cose - non ti consiglio di iniziare un progetto angolare 1.x ora - questo è probabilmente il momento peggiore per farlo dato che dovrai migrare in seguito ad angolare 2, ti preparo a pensare all'angolare piuttosto che scegliere angolare 2, google ha già lanciato un progetto con angular 2 e al termine del progetto angular 2 dovrebbe già essere sotto i riflettori. se vuoi qualcosa di più stabile, puoi pensare a reagire \ elm e flux e redux come framework JS.

angular 2 sarà fantastico, questo è senza dubbio.


8

Nessun framework è perfetto. Puoi leggere dei difetti in Angular 1 qui e qui . Ma ciò non significa che sia male. La domanda è: quale problema stai risolvendo? Se vuoi implementare rapidamente una semplice app, che è leggera, con un uso limitato dell'associazione dei dati , vai avanti con Angular 1. Angular 1 è stato costruito 6 anni fa per risolvere la prototipazione rapida che funziona abbastanza bene. Anche se il tuo caso d'uso è ancora complesso, puoi usare Angular 1, ma dovresti essere consapevole delle sfumature e delle migliori pratiche relative alla creazione di un'app Web complessa. Se stai sviluppando un'app a scopo di apprendimento, suggerirei di passare ad Angular 2 poiché è lì che è il futuro di Angular.


5

L'unica caratteristica distintiva in Angular v2 e anche in ReactJs è che entrambi hanno abbracciato la nuova architettura di sviluppo dei componenti Web. Ciò significa che ora possiamo creare componenti Web indipendenti e collegarli a qualsiasi sito Web al mondo che abbia lo stesso stack tecnologico di questo componente Web. Freddo! si molto figo. :)

L'altro cambiamento più evidente in Angular v2 è che il suo linguaggio di sviluppo principale non è altro che TypeScript. Sebbene TypeScript appartenga a Microsoft ed è un superset di JavaScript del 2015 (o ECMAScript6 / ES6), ma ha alcune funzionalità molto promettenti. Consiglierei ai lettori di controllare TypeScript in modo un po 'dettagliato (il che è ovviamente divertente) dopo aver letto questo tutorial.

Qui direi che i ragazzi che cercano di mettere in relazione Angular v1 e Angular v2 confondono ulteriormente i lettori e, secondo la mia modesta opinione, Angular v1 e Angular v2 dovrebbero essere trattati come due diversi framework. In Angular v2, abbiamo il concetto di Web-Components di sviluppare applicazioni Web, mentre in Angular v1 dobbiamo giocare con i controller e (purtroppo o per fortuna) nessun controller è presente in Angular v2.


3
Componenti disponibili anche in Angular 1 dalla versione 1.5. Ma davvero, questo era possibile anche con le direttive elementari prima.
Hubert Grzeskowiak,

Non credo sia giusto - Sia angular che React hanno un'architettura di componenti ma non un'architettura di componenti Web, che è uno standard w3c.
Nitin Jadhav,

3

Una cosa da notare è che angular2 sta usando il dattiloscritto.

Ho fatto angular1 con Cordova nel mio stagista e ora sto facendo un angular 2. Penso che angular2 sarà la tendenza in quanto più strutturata secondo me, ma i contro è che ci sono poche risorse da riferire in caso di problemi o difficoltà. 1.x angolare ha tonnellate di direttive personalizzate che possono essere super facili da usare.

Spero che sia d'aiuto.


Grazie. Le direttive sono le peggiori per le prestazioni in Angular 1.x. Devi essere molto attento o evitarli
emmanuel sio

1

Angular 2 è molto meglio di 1, almeno in ciò che offre: il supporto per i componenti web, usando il dattiloscritto, le prestazioni e la semplicità generale dell'interfaccia, è stato il motivo per cui ho deciso di avviare un progetto usando l'angolare 2. Tuttavia, dall'inizio , Mi sono reso conto che ci sono problemi in Angular 2 (ad es. Instradamento con apache) per i quali è disponibile pochissima o nessuna documentazione, quindi la documentazione e la community di Angular 2 sono la più grande trappola per Angular 2, in quanto non abbastanza sviluppata.

Direi che se hai bisogno di aprire rapidamente un sito per una breve scadenza usa il noto angolare 1, se sei in un progetto più lungo, e puoi permetterti il ​​tempo di indagare su nuovi problemi (che potresti essere il primo a incontrare , che potrebbe essere un vantaggio se pensi al contributo, potresti dare alla comunità angolare 2) piuttosto che andare con angolare 2.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.