3

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

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

例如,在 PHP 中,我可能会做一些类似的事情

<?php
echo <script>
echo  var test = $test
echo </script>
 ?>

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

以最简洁的方式完成与 MEAN 的这种集成的最佳方法是什么……

4

3 回答 3

4

Just an other 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')

than in angular you can do

angular.module('yourApp').constant('setup', config)
于 2014-01-28T11:00:38.630 回答
3

选项1

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

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

然后$http.get对该端点执行一个操作并检索 angular 上的配置对象app.run并将此配置存储在 service/ $rootScope/config 中。

app.run是角度上最接近main()函数的东西,将在应用程序启动时运行一次。

选项 2

使用咕噜声

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

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

于 2014-01-28T08:53:02.590 回答
1

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

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

服务器应该只关心资源:

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

  var setup = // something

  res.json(setup);
})

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

基于这个答案:在手动引导之前使用角度服务

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
})

如果您需要启动画面,请查看我的答案: 使用 ng-cloak 创建启动画面

于 2014-01-28T08:58:55.460 回答