Чи AngularJS тільки для односторінкових програм (SPA)?


201

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

Це проект Node.js. Наш початковий план полягав у тому, щоб скористатися Експресом та спуститися цим маршрутом, але ми вирішили, що перш ніж почати цей етап, можливо, найкраще переглянути те, що там є. У нашому додатку є декілька областей, які, на нашу думку, не відповідають одностранної моделі, оскільки вони пов'язані з точки зору програми, але не з точки зору.

Ми побачили декілька фреймворків, які ми могли б використати для створення клієнта, як Backbone.js , Meteor тощо, а також AngularJS.

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


ОНОВЛЕННЯ 17 липня 2013 р. Просто для того, щоб утримати людей у ​​циклі, я буду актуалізувати це питання під час проходження цього процесу. Зараз ми все збираємося разом, і побачимо, наскільки це добре. Ми звернулися до кількох людей, які більш кваліфіковані з AngularJS, ніж ми, і поставили питання щодо розділення великих додатків, що мають спільний контекст, але може бути занадто великим, працюючи над однією сторінкою.

Консенсус полягав у тому, що ми можемо обслуговувати декілька статичних сторінок та створювати програми AngularJS, які працюють лише з цими сторінками, ефективно створюючи колекцію SPA та зв’язуючи ці програми разом, використовуючи стандартне посилання. Зараз наш випадок використання дуже специфічний, оскільки у нашому рішенні є кілька застосувань, і, як я вже сказав, ми спробуємо спершу спробувати єдину кодову базу та оптимізувати звідти.

ОНОВЛЕННЯ 18 червня 2016 р . Проект випав зі скелі, тому ми ніколи не заважали робити занадто багато. Ми підняли його нещодавно знову, але більше не використовуємо кутові, а натомість використовуємо React. Ми все ще використовуємо архітектуру, викладену в попередньому оновленні, де ми використовуємо програми експрес-та самодостатнього вмісту, тому, наприклад, у нас є /chatмаршрут у експресі, який обслуговує наш додаток чату React, у нас є інший маршрут, /projectsякий обслуговує додаток для проектів і так далі. Те, як ми його дивимося на кожну програму - це сукупний корінь з точки зору її набору функцій, її потрібно мати можливість самостійно вважати її додатком. Технічно вся інформація є там, її просто базовий експрес та будь-який аромат клієнта на базі додатків, які ви хочете використовувати.


5
То як воно пішло? Я зараз намагаюся розібратися, як перемістити додаток ASP.NET на 50+ сторінках до чистого додатку HTML + Javascript + REST, і я дійсно не розумію, як це буде працювати як SPA.
Грег

1
Треба було перейти на щось інше. З обговорень, які ми мали і будемо мати знову, як це починається знову, це те, що SPA може бути дуже зосередженим гвинтиком у значно більшій машині. Отже, перекладаючи наш екземпляр до вашого (ми використовували чистий вузол із експресом), якщо ви хочете залишитися у фамільній стеці (.Net), ви можете використовувати MVC як ешафот і використовувати кутовий у вікнах для додавання динамічного матеріалу (кожна функція) . якщо ви не зможете зменшити додаток, впровадження 50 сторінок логіки на одну сторінку може задихнутися.
Модіка

1
Це означає, що кожен розділ (наприклад, користувачі, новини, продукти тощо) має SPA самостійно, але разом вони формують ваш додаток.
Модіка

1
Чудово, дякую. Чи є якесь конкретне кодування, яке потрібно зробити, щоб зв’язати різні SPA-зони разом? Або просто регулярні посилання?
Грег

1
@Greg, з наших обмежених знань до цих пір, оскільки вони, по суті, є додатками за власним правильним стандартним посиланням, спрацювало б, очевидно, це, мабуть, не буде прямим вперед, тому що для цього потрібно буде зберегти певну форму постійності (файли cookie, локальне зберігання). спільна інформація, наприклад, ідентифікатор або профіль, якщо програма стоїть за якоюсь формою входу. Наші програми будуть тісно пов'язані з нашим API, і, як ми створюємо надійний додаток, ми використовуємо oauth для захисту кожного запиту, я думаю, що Trello робить щось подібне, але я можу помилитися.
Модіка

Відповіді:


216

Зовсім ні. Ви можете використовувати Angular для створення різноманітних програм. Маршрутизація на стороні клієнта - лише невеликий фрагмент цього.

У вас є великий список функцій, які принесуть вам користь поза межами маршрутизації на стороні клієнта:

  • двостороння зв'язування
  • шаблонування
  • форматування валюти
  • плюралізація
  • елементи багаторазового використання
  • ВІДПОВІДНІ поводження з апі
  • AJAX поводження
  • модуляризація
  • ін'єкційна залежність

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

Якщо він відповідає вашому проекту, використовуйте його.


42
Ще один момент, який слід зазначити, полягає в тому, що Angular навіть не потрібно використовувати для повних сторінок - він може бути інтегрований у існуючу систему для складання компонентів, тобто складного віджета або плагіна всередині застарілого додатка.
Алекс Осборн

2
@ Blesh, дякую за відповідь, це має сенс, але те, що ми намагаємось знайти, це "як" ми використовуємо це для створення кількох сторінок програм, тому питання було розміщено, це справді інше питання, тому ваша відповідь була Прийнято, але, наприклад, чи можемо ми використовувати angular.js з express.js або це щось подібне - це лише марна трата часу та зайвих ускладнень.
Модіка

Кутовий з Експресом майже ідеальний! Створити RESTful API за допомогою Express, який ви можете споживати із своїх програм Angular, це дуже просто. Google NodeJS Express RESTful API та $ ресурси та послуги http Angular. Після цього просто починайте прототипувати та грати з ним. Я думаю, що ти можеш виявити, що ти занадто задумуєшся / турбуєшся над "ЯК", як тільки побачиш, як добре вони працюють разом.
Бен Леш

@Blesh, вибач, що повернувся пізно. У нас вже є API REST / Hypermedia API, побудований за допомогою Restify, я думаю, нам потрібно знайти акуратний спосіб пов’язати окремі "додатки", створені разом, і вивчить це питання, і, можливо, оновить питання в якийсь момент.
Модіка

@Modika, чи вдалося вам знайти якісь хороші ресурси, або ви маєте гарну інформацію про багатосторінкові програми?
dre

16

Я боровся з "як" спочатку і з Angular. Тоді одного разу на мене осяяло: "Це СТАЛЬНО javascript". Існує маса прикладів про входи та виходи Angular (один із моїх улюблених разом із книгою https://github.com/angular-app/angular-app ). Найголовніше, що потрібно пам’ятати, - це завантажувати файли js так само, як і в будь-якому іншому проекті. Все, що вам потрібно зробити, це переконатися, що різні сторінки посилаються на правильний кутовий об’єкт (контролер, перегляд тощо), і ви не працюєте. Сподіваюся, це має сенс, але відповідь була такою простою, що я її не помітив.


6

Можливо, мій досвід комусь стане у нагоді. Ми розділили наш проект логічно. Один SPA ми використовуємо для подачі, інший для роботи з картою, інший для редагування профілю користувача тощо. Наприклад, у нас є три програми: канал, користувач та карта. Я використовую його у відокремлених URL-адресах, наприклад:

https://host/feed/#/top/
https://host/user/#/edit/1/
https://host/map/favorites/#/add/

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

Дійсно, ви можете дуже легко створити суміш програм SPA, наприклад, канал буде URL-адресою із програмою angularjs, користувацьким додатком з reactjs та відображенням на додаток backbone.js.

У відповідь на ваше запитання:

Кутовий не тільки для SPA, Angular грає добре і швидко для SPA-програм, але ніхто не заважає будувати MPA-застосування для різних SPA-програм. Але, думаючи про вашу архітектуру URL, не забувайте про наявність у ваших додатках SEO.

Я також підтримую ідею:

Яка різниця між проектом та програмою? Додаток - це веб-додаток, який щось робить - наприклад, система Weblog, база даних публічних записів або просте опитування. Проект - це набір конфігурацій та додатків для певного веб-сайту. Проект може містити кілька додатків. Додаток може бути в декількох проектах.


3

Якщо все, що вам потрібно, - це кілька сторінок із прив’язкою даних клієнта, я б перейшов до нокауту та Javascript Namespacing.

Нокаут чудовий, особливо якщо вам потрібна неускладнена сумісність назад і у вас досить прямі передні сторінки. Якщо ви використовуєте сторонні компоненти, користувацькі прив’язки Knockout є простими та зручними для роботи.

Простір імен Javascript дозволяє тримати код окремим та керованим.

var myCo = myCo || {};
myCo.page = {
    init: function(){ ... },
    ...
}

І в тезі сценарію після завантаження інших сценаріїв

<script>
    myCo.init();
</script>

Головне, ви використовуєте будь-який інструмент, який вам потрібен, коли вам це потрібно. Потрібні прив'язки даних? Нокаут (або що завгодно). Потрібна маршрутизація? sammy.js (або що завгодно).

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


1

Я б сказав, що Angular є надмірним, якщо ви просто хочете розробити SPA. Впевнений, якщо вам вже зручно розвиватися з цим, продовжуйте. Але якщо ви новачок у цій галузі і вам потрібно лише розробити SPA, я б подумав про щось більш просте з низкою власних привілеїв. Я рекомендую дивитися в Vue.js або Aurelia.io .

Vue.js використовує двостороннє прив'язування даних, MVVM, компоненти для багаторазового використання, простий та швидкий підбір, менший код для запису тощо. Він поєднує в собі деякі найкращі характеристики Angular та React.

Aurelia.io , чесно кажучи, я не знаю багато про що. Але я зазирнув, і здається, альтернатива, яку варто переглянути, схожа на вищезазначене.

Посилання:
https://vuejs.org/
http://aurelia.io/

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