如何将请求参数传递回Angular

How to pass request parameters back to Angular

本文关键字:Angular 参数传递 请求      更新时间:2023-09-26

我目前有一个应用程序,使用Express与翡翠模板。我正在用Angular和客户端HTML构建一个新版本的应用。

我需要访问某些请求参数,以便确定我的Angular代码中的用户权限。我的问题是,我不知道如何在我的Angular控制器/服务中获取这些参数。

下面是目前在Express中使用Jade结构的情况:

routes.js:

router.get('/player/:id',
  playerRoute.show
);

player.js:

var show = function(req, res) {
  res.render('player', {user: req.user});
};

…现在我的新版本的处理程序:

var player = function(req, res) {
  //res.sendFile(path.join(__dirname, '../v2', 'index.html'));
  res.json({user: req.user});
};
使用上面的代码将正确的用户JSON发送回客户端。当res.json被注释掉而res.sendFile被取消注释时,正确的HTML将被呈现。我的困境是如何既渲染这个HTML和提供我的客户端Angular代码与user JSON对象?

你的问题归结为:

我的困境是如何既渲染这个HTML和提供我的客户端Angular代码与用户JSON对象?

你不。通常的情况是只渲染HTML和渲染初始应用所需的资源(隐藏所有内容,显示启动画面等等)。进一步的数据(比如获取你的user)是通过Angular的HTTP功能调用API来处理的。这意味着它们是分开的。在这个API调用之后,你的应用决定渲染什么。

否则,你可以把HTML中的数据渲染成某个全局变量,让Angular从那里把它捡起来。这是混乱的IMO,但不需要一个单独的API调用来获取数据。

摘自我自己对类似问题的回答

要从服务器端到客户端javascript获取变量,请尝试将json字符串模板化到html中并从javascript加载它。EJS处理引号转义,我认为Jade也可以。作为参考,content!= safeString告诉Jade跳过转义,内容!{safeString}也是如此。

- var user={id:1, displayName:'foo'}
#example
  meta(data-userJSON=JSON.stringify(user))
script(src="//code.jquery.com/jquery-1.11.3.min.js")
script.
  var user = JSON.parse(
    $('#example meta').attr('data-userJSON')
  )
  console.log(user);
span #{user.id}
span #{user.displayName}

我是这样处理这种情况的。我只是创建了一个新的API端点,我可以用Angular服务轻松地访问它。下面是Node的设置:

routes.js:

router.get('/currentUser',
  apiController.currentUser.index
);

currentUser.js:

var index = function(req, res) {
  res.json({user: req.user});
};
module.exports = {
  index: index
};

对我来说,通过API调用来获取请求参数仍然很奇怪,但它可以工作。反馈感激。