2013-12-12 5 views
1

Что такое хороший подход к настройке передачи в приложение AngularJS? стекПередача настроек в приложение AngularJS

Технология:

  • Node.js
  • AngularJS

Настройки выглядеть следующим образом:

window.settings = {}; 
settings.webSocketURL = 'ws://domain.com/websocket'; 
settings.webSocketTopic = 'name'; 

Вот несколько вариантов:

  1. Включить скрипт <script src="scripts/settings.js"></script>

    Недостатки: settings.js файл находится в директории скриптов, а не корневой каталог, дополнительный скрипт для загрузки.

  2. Включить скрипт как в 1, а settings.js создается Node.js.

    Недостаток: дополнительный сценарий для загрузки.

  3. Внедрение настроек непосредственно в HTML.

    Недостаток: вам нужно использовать шаблоны, подобные EJS, вместо HTML.

ответ

0

У меня была аналогичная проблема, и я решил с помощью конфигурации:

myapp 
.constant("settings", { 
    "webSocketURL": 'ws://domain.com/websocket', 
    "webSocketTopic": "name" 
}) 

затем в контроллерах вы просто должны вводить настройки, и получить их, например, с settings.webSocketURL

+0

Это хороший способ AngularJS опр но он не является удобным для модификаций конечным пользователем. В идеале должен быть файл настроек в корневой папке веб-приложения, который изменяется в зависимости от конкретной среды пользователя. – webdev

+0

В этом случае вы можете рассмотреть возможность использования заводов: это хороший пример, относится к названиям страниц, но может быть легко адаптирован к вашим потребностям: http://maurizionapoleoni.de/blog/Setting-Page-titles-with-AngularJS.html –

+0

Да. Имеет смысл обернуть настройку в провайдер, но вопрос в том, что является хорошим способом загрузки данных и, возможно, не является конкретным вопросом AngularJS. У меня есть файл config.js, который используется приложением Node.js. В идеале я хотел бы сделать его частью (параметры на стороне клиента), доступным для AngularJS. – webdev

0

Я полагаю, вы могли бы создать конфигурационный модуль в любом месте, где бы вы ни находились

// config/app.coffee 
angular.module('MyAppConfig', []) 
    .config ($provide) -> 
    $provide.constant 'webSocketURL', 'ws://domain.com/websocket' 
    $provide.constant 'webSocketTopic', 'name' 

И используйте задачу Grunt или скрипт или что-то другое, чтобы связать его с вашим сценарием приложения.

+0

Я использую Grunt для создания дистрибутива (папка dist). Предпочтительным способом является не использование каких-либо конкатенаций для этого. Этот файл настроек должен быть изменен конечным пользователем, который запускает веб-приложение в пользовательской среде (у пользователя может не установлен хрюкать). – webdev

+0

Хорошо, думаю, я неправильно понял ваш вопрос. Эти настройки предназначены для изменения потенциальным конечным пользователем приложения? Если это так, я думаю, что это действительно зависит от варианта использования. Как будет распространяться приложение и как оно должно быть развернуто (просто открыв браузер, запустив локальный сервер или загрузив его на «обычный» сервер)? –

+0

У меня есть файл config.js, который используется приложением Node.js, app.js имеет var config = require ('./ config'); В идеале я хотел бы сделать его частью (параметры на стороне клиента), доступным для AngularJS. – webdev

0

Вот мое решение:

  • Настройки Put клиента в конфигурации сервера.
 

    config.settings = {}; 

  • Сформировать JS файл с Node.js
 

    app.get('/settings.js', function(req, res) { 
     res.setHeader('Content-Type', 'application/javascript'); 
     res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate'); 
     res.setHeader('Pragma', 'no-cache'); 
     res.setHeader('Expires', 0); 

     res.send('window.settings = ' + JSON.stringify(config.settings) + ';'); 
    }); 

  • Определить AngularJS постоянные
 

    ngular.module('app') 
     .constant('settings', window.settings) 

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