AngularJS vs Angular [закрито]


159

Місяць тому я вирішив вивчити кутовий. Коли я робив деякий заздалегідь і створював якийсь додаток, використовуючи його, я розумію, що Angular 2 знаходиться в попередньому перегляді розробника, тому це питання часу, перш ніж його випустити. Оскільки Angular 2 не буде сумісний з Angular 1, і в ньому є багато змін, питання полягає в тому, чи краще продовжувати розробку з Angular 1.x або почати розробку Angular 2?

Це факт, що нам не завжди доводиться використовувати найновішу версію чи найновішу мову на ринку, але в цьому випадку додаток все-таки невеликий, щоб я міг змінитись без проблем.


1
Я спробував би спочатку з кутовим 1. Є тони рішень і багато відповідей на багато питань. Можливо, кутовий 1.5 буде мостом до 2. Кутовий 2 все ще буде трохи схожий на кутовий 1, тому я б спробував 1, тому що немає конкретної дати, коли 2 буде готовим до виробництва.
ssuperczynski



80
StackOverflow залишив пробіл для Quora. Усі подібні запитання, які закриті на основі думки чи не дуже підходять, тепер відображаються в Quora та вище в пошуковій системі, ніж stackoverflow. Дуже ганьба. Я не бачу нічого поганого, щоб задати таке питання на SO, де технологія має таку глибину та широту. Ми всі щодня стикаємося з подібними питаннями, підбираючи одне за іншим. давайте дозволимо задавати і відповідати справжнім питанням.
Приянк

Використовуйте назву AngularJS для будь-якого випуску 1.x, а Angular для будь-якого випуску 2+. Див. Рекомендації щодо брендингу для кутових та кутових JS .
georgeawg

Відповіді:


157

Дозвольте мені передмовити, сказавши: я припускаю, що ви та всі, хто буде це читати, вже зручніше з Angular 1 ( тепер його називають AngularJS , на відміну від просто Angular для нових версій). Якщо говорити, давайте розберемося з деякими доповненнями та ключовими відмінностями у Angular 2+.

  1. Вони додали кутовий cli.

Ви можете розпочати новий проект, запустивши ng new [app name]. Ви можете подати свій проект, запустивши ng serve докладніше тут: https://github.com/angular/angular-cli

  1. Ваш кутовий код записаний у ES6 Typescript і він збирається під час виконання Javascript у браузері.

Щоб зрозуміти це, я рекомендую ознайомитись із списком ресурсів, який я маю внизу своєї відповіді.

  1. Структура проекту

У базовій структурі у вас буде app/tsпапка, в якій ви будете виконувати більшу роботу, і app/jsви знайдете у app/jsпапках файли з .js.mapрозширенням. Вони "відображають" ваші ".ts" файли у вашому веб-переглядачі для налагодження, оскільки ваш браузер не може читати нативну машинопис.

Оновлення . Не ввімкнено бета-версію. Структура проекту дещо змінилася, в більшості випадків, і якщо ви використовуєте кутовий кліп, ви будете працювати в src/app/папці. У проекті для початківців у вас буде наступне.

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

app.component.css : CSS-файл, який слід використовувати конкретно дляcomponent.html

app.component.html : Перегляд (змінна оголошена в app.component.js)

app.component.spec.ts : використовується для тестуванняapp.component.ts

app.component.ts : Ваш код, на який пов'язуєтьсяapp.component.html

app.module.ts : це те, що стартує у вашій програмі, і де ви визначаєте всі плагіни, компоненти, послуги тощо. Це еквівалент app.jsкутового 1

index.ts використовується для визначення або експорту файлів проекту

Додаткова інформація:
Підказка: ви можете запускати ng generate [option] [name]для створення нових служб, компонентів, труб тощо.

Також tsconfig.json файл важливий, оскільки він визначає правила складання TS для вашого проекту.

Якщо ви думаєте, я повинен вивчити зовсім нову мову?... Ех, начебто, TypeScript - це набір JavaScript. Не лякайтеся; це там, щоб полегшити ваш розвиток. Я відчував, що я добре зрозумів це лише через кілька годин, граючи з ним, і все це впало через 3 дні.

  1. Ви пов'язуєте свій HTML так само, як і в директиві Angular 1. Настільки змінні, як $scopeі $rootScopeбули застарілими.

Цього ти мав на увазі. Кутовий 2 все ще є MV *, але ви будете використовувати " компоненти " як спосіб прив'язування коду до ваших шаблонів, наприклад, візьміть наступне

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

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

    export class AppComponent {}

Тут подумайте про цю importзаяву як про ін'єкцію залежності у контролер v1. Ви використовуєте importдля імпорту ваших пакунків, де import {Component}йдеться про те, що ви будете робити componentприв'язку до свого HTML.

Зверніть увагу , що @Componentдекоратор у вас є selectorі template. Тут подумайте про те selector, $scopeщо ви використовуєте, як ви використовуєте v1, directivesде ім'я цього те selector, що ви використовуєте для прив'язки до свого HTML, як так

<my-app> </my-app>

Де <my-app>ви використовуєте власний тег, який ви будете використовувати, який буде виконувати функції заповнення для того, що оголошено у вашому шаблоні. тобто) <h1> Hello World! </h1>. Тоді як це виглядатиме так у v1:

HTML

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

JS

$scope.hello = "Hello World!"

Також ви можете додати щось між цими тегами, щоб створити повідомлення про завантаження, наприклад таке:

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

Потім відобразиться " Завантаження ... " як повідомлення про завантаження.

Зауважте, що те, що оголошено, template- це шлях або необроблений HTML, який ви будете використовувати HTMLу своєму selectorтезі.


Більш повна реалізація Angular 1 виглядала б приблизно так:

HTML

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

У v1 це виглядатиме щось на кшталт

JS

angular.module('controller', [])



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

Це мені дуже подобається v2. Я виявив, що директива була крутою кривою навчання для мене в v1, і навіть коли я їх зрозумів, я часто маюCSS рендеринг не так, як я задумав. Я вважаю, що це спосіб простіше.

V2 дозволяє легше масштабувати додаток, оскільки ви можете розбити свій додаток легше, ніж ви могли б у v1. Мені подобається такий підхід, оскільки ви можете мати всі свої робочі частини в одному файлі, на відміну від декількох у кутовій v1.

Що щодо перетворення вашого проекту з v1 в v2?


З того, що я чув від команди розробників, якщо ви хочете оновити свій проект v1 до v2, ви просто переживете і видалите застарілі краплі і заміните свої $scopes на selectors. Я вважаю це відео корисним. Це з деякими командами Ionic, які працюють поруч із кутовою командою, оскільки v2 має більшу увагу на мобільному https://youtu.be/OZg4M_nWuIk Сподіваюся, що це допомагає.

ОНОВЛЕННЯ: Я оновив, додавши приклади, оскільки офіційні реалізації Angular 2 з'явилися.

ОНОВЛЕННЯ 2: Це все ще видається популярним питанням, тому я просто подумав, що я знайшов би якийсь ресурс, який мені дуже корисний, коли я почав працювати з кутовим 2.

Корисні ресурси:

Для отримання додаткової інформації про ES6, я рекомендую ознайомитися з навчальними посібниками з нових можливостей ECMAScript 6 / ES6 New Boston - Плейлист YouTube

Щоб написати функції Typescript і подивитися, як вони компілюються в Javascript, ознайомтеся з майданчиком для мови Typescript

Щоб побачити функцію за розбиттям функцій того, що відповідає еквівалентності Angular 1 у Angular 2, див. Короткий довідник Angular.io - Cookbook -A1 A2


Якщо я підтримую кутові 1 і 2 в тому ж додатку, чи зможу я в 5 разів збільшити продуктивність на візуалізації сторінок, де передбачені сторінки Angular 2?
Сампат

1
@Sampath Я сумніваюся, що в 99% усіх додатків помітна зміна продуктивності. AFAIK поняття A2 такі ж, як і за А1, лише синтаксис трохи змінився.
Hubert Grzeskowiak

Це хороше коротке стисле порівняння. Я поставлю це в закладки як швидке посилання. плюс один від мене
Фуад Букредін

39

Це може допомогти вам зрозуміти порівняння кута 1 та кутового 2.

У Angular 2 виявилося багато переваг над кутом 1:

  • Це повністю базується на компонентах.
  • Краще виявлення змін
  • Попереду компіляція часу (AOT) покращує швидкість візуалізації.
  • TypeScript в основному використовується для розробки програм Angular 2.
  • Кутовий 2 має кращі показники порівняно з кутовим 1.
  • Angular 2 має більш потужну систему шаблонів, ніж Angular 1.
  • Angular 2 має більш прості API, ледаче завантаження, простішу налагодження.
  • Кутовий 2 набагато доцільніший, ніж кутовий 1.
  • Кутовий 2 забезпечує вкладені компоненти.
  • Кутовий 2 забезпечує спосіб виконання більше двох систем разом.
  • І так далі...

1
Щодо продуктивності, чи є тести для порівняння? Крім того, в якому СПА на першому місці стоять результати? Вкладені компоненти також доступні в А1. Не маю поняття, що ви маєте на увазі під останнім пунктом, але AFAIK ви можете мати кілька ng-додатків на одній сторінці
Hubert Grzeskowiak

1
Кутовий 2 має кращі показники, ніж кутовий 1. Це абсолютно неправильно, доведіть це деяким відповідним орієнтиром;)
amdev

2
Скажіть, як це неправильно? :) і ваша відповідь тут для проблем із продуктивністю в кутовій
Аніл Сінгх

16

Кутовий 2 і Кутовий 1 - це в основному різні рамки з однаковою назвою.

Кутовий 2 є більш готовим до поточного стану веб-стандартів та майбутнього стану Інтернету (ES6 \ 7, незмінність, компоненти, тіньовий DOM, сервісні працівники, мобільна сумісність, модулі, машинопис та інше тощо).

angular 2 убив багато основних особливостей у кутових 1 на кшталт - контролери, $ range, директиви (замінені на анотації @component), визначення модуля та багато іншого, навіть прості речі, такі як ng-повтор, не залишилися такими, як це було.

у будь-якому випадку зміна є хорошою, кутовий 1.x мав її недоліки, а кутовий 2 готовий до майбутніх вимог до Інтернету.

підводячи підсумок - я не рекомендую вам починати проект кутового 1.x зараз - це, мабуть, найгірший час для цього, оскільки вам доведеться пізніше перейти на кутовий 2, я налаштовуєте свій погляд на кутовий, ніж вибирати кутовий 2, google вже запустив проект з кутом 2, і до моменту завершення проекту кутовий 2 вже повинен бути в центрі уваги. якщо ви хочете чогось стабільного, ви можете подумати про реакцію \ elm, флюс та редукцію як рамки JS.

кутовий 2 буде дивним, це без сумніву.


8

Жодна рамка не є досконалою. Про недоліки у куті 1 ви можете прочитати тут і тут . Але це не означає, що це погано. Питання в тому, яку проблему ви вирішуєте. Якщо ви хочете швидко розгорнути просту програму, яка є легкою, з обмеженим використанням прив'язки даних, тоді продовжуйте роботу з кутовим 1. Кутовий 1 був побудований 6 років тому, щоб вирішити швидке прототипування, що це робить досить добре. Навіть якщо ваш випадок використання складний, ви все одно можете використовувати Angular 1, але тоді вам слід знати про нюанси та найкращі практики створення складної веб-програми. Якщо ви розробляєте додаток для навчальних цілей, я б запропонував перейти до Angular 2, оскільки саме там є майбутнє Angular.


5

Єдиною особливою особливістю в Angular v2, а також у ReactJs є те, що вони обидві застосували нову архітектуру розробки Web-Components. Це означає, що зараз ми можемо створювати незалежні Web-компоненти і підключати їх до будь-якого веб-сайту світу, який має той самий стек технологій цього веб-компонента. Класно! так, дуже круто. :)

Інша найбільш помітна зміна Angular v2 полягає в тому, що мова його первинної розробки - це не хто інший, як TypeScript. Хоча TypeScript належить корпорації Майкрософт, і він є набором JavaScript 2015 року (або ECMAScript6 / ES6), але він має деякі особливості, які є дуже перспективними. Я порекомендував би читачам ознайомитись із TypeScript трохи детально (що, звичайно, приємно), прочитавши цей підручник.

Тут я б сказав, що хлопці, які намагаються взаємозв’язати Angular v1 і Angular v2, ще більше збивають з пантелику читачів, і на мою скромну думку, Angular v1 та Angular v2 слід трактувати як дві різні рамки. У Angular v2 у нас є концепція розробки веб-додатків Web-Components, тоді як в Angular v1 ми повинні грати з контролерами, і (на жаль, на щастя) в Angular v2 немає контролерів.


3
Компоненти також доступні в Angular 1 з версії 1.5. Але справді це було можливо і раніше за допомогою елементів-директив.
Hubert Grzeskowiak

Я не думаю, що це правильно - І кутова, і Реакт має архітектуру компонентів, але не архітектуру веб-компонентів, що є стандартом w3c.
Нітін Ядхав

3

Одне, що слід помітити, це angular2 - це використання typecript.

Я робив angular1 з кордовою в моєму стажуванні, і тепер я займаюся кутовим 2. Я думаю, що angular2 буде тенденцією, оскільки він більш структурований, на мій погляд, але мінуси полягають у тому, що є мало ресурсів, на які слід звертатися, коли у вас є проблеми або труднощі. кутовий 1.x має багато персоналізованих директив, які можуть бути надзвичайно простими у використанні.

Сподіваюся, це допомагає.


Дякую. Директиви найгірші за ефективність у Angular 1.x. Ви повинні бути дуже обережними або уникати їх
emmanuel sio

1

Кутовий 2 набагато краще, ніж 1, принаймні в тому, що він пропонує: підтримка веб-компонентів, використовуючи машинопис, продуктивність та загальну простоту інтерфейсу, стала причиною, коли я вирішив запустити проект за допомогою кутового 2. Однак, з початку руху , Я зрозумів, що в куті 2 є проблеми (наприклад, маршрутизація з apache), для яких дуже мало або взагалі немає документації, тому документація та спільність кута 2 є найбільшою проблемою для кута 2, оскільки вона недостатньо розроблена.

Я б сказав, якщо вам потрібно швидко підняти сайт на короткий термін, використовуйте добре відомий кутовий 1, якщо ви працюєте в більш тривалому проекті, і ви можете дозволити собі час для вивчення нових проблем (що, можливо, ви будете першими зіткнутися , що може бути бонусом, якщо ви думаєте про внесок, ви можете дати кутовій 2 громаді), ніж перейти з кутовою 2.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.