将设置传递给AngularJS App

时间:2013-12-12 05:35:38

标签: javascript angularjs

将设置传递给AngularJS app的好方法是什么?

技术堆栈:

  • Node.js
  • AngularJS

设置如下所示:

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

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

以下是几个选项:

  1. 包含脚本

    缺点:settings.js文件位于scripts目录中,而不是根目录,需要加载其他脚本。

  2. 包含1中的脚本,但settings.js由Node.js生成。

    缺点:要加载的其他脚本。

  3. 将设置直接嵌入HTML。

    缺点:需要使用像EJS这样的模板而不是HTML。

3 个答案:

答案 0 :(得分:0)

我有类似的问题,我使用配置解决了:

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

然后在您的控制器中,您只需要注入设置,然后使用settings.webSocketURL

获取它们

答案 1 :(得分:0)

我想您可以在任何地方创建配置模块

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

使用Grunt任务,或脚本或其他任何东西将其与应用程序脚本连接起来。

答案 2 :(得分:0)

这是我的解决方案:

  • 将客户端设置放入服务器配置。

    config.settings = {};

  • 使用Node.js生成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)