2016-06-13 6 views
2

Я ищу, чтобы создать приложение Angular2, которое можно запускать двумя разными способами - либо внутри Electron, либо через CLI.Использование Angular2 за пределами браузера

В основном базовые компоненты приложения представляют собой набор услуг. В версии приложения Electron эти службы будут отображаться через набор интерактивных компонентов, однако для версии CLI они будут доступны с использованием узла.

В данный момент я нахожусь в научно-исследовательском/РоС фазе - пытаюсь подтвердить, что это возможно, и 2 вопросы возникли:

  1. ли Угловая поддержка любых других платформ? Кажется, что метод бутстрапа применим только для браузера.
  2. Похоже, что Angular2 не поддерживает инъекционные услуги в сервисах, если они не определены на уровне компонента/приложения (то есть в службе нет инжектора). Я не хочу добавлять все свои зависимости для всех моих сервисов на уровне приложений - на самом деле это не будет работать, поскольку мне нужны не одиночные игры. Кто-нибудь разработал обходное решение для этого?

Возможно, Angular2 не подходит для этого.

ответ

1
  1. Что значит «другие платформы»? Angular2 - это веб-фреймворк для браузера. Электрон использует браузер, поэтому его можно использовать там. Ionic имеет слой перевода из углового в его собственное представление.

Угловая конструкция, которая может быть расширена для использования на других платформах.

  1. Angular2 поддерживает услуги по инъекции услугам. То, что оно не поддерживает, объявляет поставщиков на уровне обслуживания. Это поддерживается только для bootstrap() и для компонентов или директив.

Я не заинтересован, чтобы добавить все мои зависимостей для всех моих услуг на уровне приложений

Вы можете создать массив переменных в модуле, который содержит необходимые поставщиков. Если модулю нужны поставщики нескольких модулей, которые он использует или экспортирует, модуль может экспортировать такую ​​переменную, которая содержит такие переменные из других модулей. Поставщик может быть произвольно вложен. Затем вы можете экспортировать одну или несколько таких переменных верхнего уровня, которые должны быть добавлены к bootstrap(), или к корневому компоненту или другому компоненту, который должен определить область действия поставщика.

Фактически, это не сработает, поскольку мне нужны не одиночки. Кто-нибудь разработал обходное решение для этого?

Первое не связано с не-одиночными. В зависимости от того, какие вам нужны неселекты, есть разные способы.

Если вы добавляете поставщика к компоненту, этот компонент является корнем области, в которой поддерживается один экземпляр. Этот компонент и все его дочерние элементы (если у них нет одного зарегистрированного поставщика) будут получать единственный экземпляр, поддерживаемый этим провайдером, при каждом запросе.

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

+0

Вы действительно хотите построить приложение с угловым CLI без графического интерфейса? Угловая построена так, что она может работать без GUI (https://github.com/angular/universal), но это только для определенной цели (SEO и более быстрый начальный вид после загрузки). В основном вам просто нужно предоставить собственный рендерер, чтобы иметь возможность запускать его на узле и использовать альтернативный ввод-вывод вместо браузера. –

+0

Спасибо, Гюнтер, цените, что вы проводите время. «Другими платформами» я имел в виду интерфейс командной строки (узел), а не браузер. Как таковой, я предполагаю, что не могу использовать Компоненты, поскольку нет представления HTML. Вместо этого я решил создать службы (стандартные классы JS), которые либо запускаются через компонент (в электронном), либо через CLI. Мне нравится ваш подход к использованию заводов для создания неэлементных версий класса, однако в идеальном мире я бы мог указать поставщиков услуг - для меня это определенно похоже на ограничение. – user2294382

+0

На самом деле вы можете использовать компоненты, но, как уже упоминалось, вам нужен собственный рендерер. Ограничение не может указывать поставщиков услуг. Есть и другие. Пожалуйста, обратите внимание на то, что Angular2 представляет собой совершенно новую структуру с очень небольшим сходством с ее предшественником, а Angular2 все еще является предварительным выпуском. Это означает, что при улучшении высокоприоритетных функций будут выполняться улучшения. –

Смежные вопросы