【问题标题】:Access global variable in angular以角度访问全局变量
【发布时间】:2013-03-01 16:38:29
【问题描述】:

我正在使用 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 传递给视图的“用户”变量?

【问题讨论】:

    标签: javascript express angularjs


    【解决方案1】:

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

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

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

    这会像这样呈现 HTML:

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

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

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

    【讨论】:

    • 感谢 Josh,确实是一个很大的帮助,并且 +1 帮助我找出了我困惑的根源 :)
    【解决方案2】:

    可以在 Angular 中通过将插值分配给 ng-init 中的变量来访问 Jade 变量

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    相关资源
    最近更新 更多