以角度访问全局变量

时间:2013-03-01 16:38:30

标签: javascript express angularjs

我正在使用node express和angular。在我的express app.js中,我声明了一个路由并将一个变量传递给渲染页面,就像这样......

app.get('/test' function(req, res){
  res.render('test', { user: 12345 });
});

在我的'测试'视图中,我使用ng-controller将容器链接到angular,就像这样......

<div ng-controller='testCtrl'> <!--some markup here--> </div>

在我的angular controllers.js中,我为我的视图声明了一个函数,就像这样......

function testCtrl($scope) {
    /*...some code here...*/
}

如何在我的控制器功能中访问从express传递到视图的'user'变量?

2 个答案:

答案 0 :(得分:7)

因为您使用模板来呈现视图,所以有两种不同的执行:(1)您的服务器正在呈现页面(使用user var),然后(2)浏览器运行AngularJS。所以你不能将变量从(1)传递给(2)。

但是,有一个名为ngInit的指令将在引导程序期间解析表达式。如果你在ExpressJS中使用Jade模板,你可以这样做:

div(ng-init='user = "'+user+'"')

哪会像HTML一样呈现HTML:

<div ng-init="user = 'whatever-server-sent'"></div>

因此,当AngularJS引导页面的这一部分(或此部分或模板)时,user将成为带有服务器值的范围变量。

我没有测试Jade代码而且我不是Jade专家,但这应该让你走上正轨。如果你正在使用不同的模板引擎,请告诉我,我会修改答案。

答案 1 :(得分:-1)

通过将插值赋值给ng-init

中的变量,可以在Angular中访问Jade变量

首先,您必须对用户进行字符串化,然后使用#{value} div(ng-init = 'angularUser = #{JSON.stringify(user)}')

进行插值

在这种情况下,user变量是一个Jade变量