AngularJS中的ExpressJS变量 - Mean Stack

时间:2014-01-28 07:34:04

标签: node.js angularjs express mean-stack

我正在构建一个MEAN应用程序,我遇到的一个问题是我想让我的用户对所使用的路由进行某种控制。所以我希望我的服务器端代码(expressJS)在我的客户端代码中设置一些变量。

基本上我希望能够从我的服务器端代码生成我的客户端JS。

例如,在PHP中我可能会按照

的方式做一些事情
<?php
echo <script>
echo  var test = $test
echo </script>
 ?>

我不是在讨论绑定,只需要在初始应用程序加载时设置变量。

以最干净的方式实现与MEAN的这种集成的最佳方式是什么......

3 个答案:

答案 0 :(得分:4)

只是另一个approch

router.js
app.get('/myconfig', function(req, res){
    var config = {prop1:1,myarray:[1,2,3]};
    var json = JSON.stringify(config);
    res.end('var config='+json);
});
jade
script(type='text/javascript', src='/myconfig')

比你能做的角度

angular.module('yourApp').constant('setup', config)

答案 1 :(得分:3)

选项1

首先编写一个将返回配置的api端点。

app.get('/conf', function(req, res) {
    res.send(200, {
        foo: "bar"
    });
});

然后对此端点执行$http.get并检索角度app.run上的配置对象,并将此配置存储在服务/ $rootScope / config中。

app.runmain()函数的角度最接近,并且在应用程序启动时将运行一次。

选项2

使用grunt

如果您的解决方案不需要从服务器端显式获取变量,并且在部署应用程序时已知它们,则可以使用grunt进行javascript编译和注入配置。

这就是我个人处理这种情况的方式。

答案 2 :(得分:1)

我的方法是客户与客户之间的完全分离。服务器端。

演示插件:http://plnkr.co/edit/5cFLo3wLfbL0bUnifJe5?p=preview

服务器应该只关注资源:

app.get('/api/setup', function(req,res){

  var setup = // something

  res.json(setup);
})

客户端可以在获取数据后推迟引导程序:

基于这个答案:Using angular services before manual bootstrap

angular.bootstrap().invoke(function($http){ 

    $http.get('/api/setup').then(function(res){

        // providing the fetched data to the module:
        angular.module('yourApp').constant('setup', res.data)

        // manual bootstraping
        angular.bootstrap(document,['yourApp']);

    })
});

然后您可以在模块中注入setup

app.config(function(setup){
  // constants can be injected to config blocks
})

app.controller('ctrl',function(setup){
   // do what you need
})

如果您需要启动画面,请查看我的回答: Creating a splash screen using ng-cloak