Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问角函数中的Get变量_Javascript_Node.js_Express_Angularjs - Fatal编程技术网

Javascript 访问角函数中的Get变量

Javascript 访问角函数中的Get变量,javascript,node.js,express,angularjs,Javascript,Node.js,Express,Angularjs,我正在node express和angular js中构建一个应用程序。我将一个变量传递给我的视图,如下所示 app.get('/profile', ensureAuthenticated, function(req, res){ res.render('profile', { user: req.user }); }); 我可以像这样访问视图中的变量(jade) 但是如何从控制器或指令中的角度函数访问此变量呢?我觉得您可能以不理想的方式混合了一些东西。我认为最好的方法是在Angular代

我正在node express和angular js中构建一个应用程序。我将一个变量传递给我的视图,如下所示

app.get('/profile', ensureAuthenticated, function(req, res){
  res.render('profile', { user: req.user });
});
我可以像这样访问视图中的变量(jade)


但是如何从控制器或指令中的角度函数访问此变量呢?

我觉得您可能以不理想的方式混合了一些东西。我认为最好的方法是在Angular代码中调用/profile并以这种方式获取数据

这样想,您刚刚使用node创建了一个Web服务,现在使用AngularJS从您的服务层调用Web服务。调用它的代码非常简单,可以在我链接的文档中找到


您可能还想查看,它使用node.js作为Web服务层,angularJS作为客户端UI层,与您设置的方式完全相同

谢谢James,FoodMe演示看起来是一个很好的学习资源。读了你的回复后,我的想法发生了很大的变化,我提出了自己的解决方案。我将添加它作为替代答案,因为注释中的代码很糟糕。为了提高我对节点和角度如何协同工作的理解,也许您或其他人可以对我们的两种解决方案进行比较,以及为什么或何时选择一种更好的解决方案进行评论

在我的express app.js中

app.get('/api/user', api.user);
在我的routes/api.js中

exports.user = function (req, res) {
  res.json(req.user);
};
然后在我的角度控制器中

function profileCtrl($scope, $http) {

  $http.get('/api/user/').success(function(data) {
    $scope.user = data;
  });
}

我写了一篇关于这个话题的博文-

总之,您有三种选择:

  • 使用内联JavaScript标记(不推荐)
  • 发出HTTTP请求(如您自己的解决方案中所示)
  • 使用
  • 你可以在我的帖子里读到细节,我只展示最后一个,也是我认为最聪明的解决方案

    要将
    user
    对象从express服务器传递到角度控制器,请使用
    ngInit
    指令:

    div(ng-controller="UserCtrl", ng-init="user= #{JSON.stringify(user)}")
    
    将内容加载到Angular scope中,您应该能够通过调用
    $scope.user
    在控制器内访问它

    function UserCtrl($scope) {
      console.log($scope.user);
    }
    

    ng init
    不是以角度加载/存储常量的方法。介绍,角度的方式:

    <script>
      angular.module('$preloaded', []).constant('$preloaded', <%= preloaded %>)
    </script>
    
    
    角度.module('$preload',[])。常量('$preload',)
    

    然后,您可以在代码中的任何位置插入
    $preload
    依赖项,并访问常量。

    这是一篇旧文章,但却是一篇相关文章。Zemrico的答案很好,但需要更新,因为jade/pug语法有一些变化。首先,他的答案中的链接已断开,应予以删除

    如果你正在阅读这篇博文,请注意以下内容不再适用于帕格,不再接受插值作为属性

    div(ng-controller="UserCtrl", ng-init="user= #{JSON.stringify(user)}")
    
    相反,请用这个

    div(ng-controller="UserCtrl", ng-init="user=" + JSON.stringify(user) )
    

    祝贺你,感谢你提供了一个非常好的、干净的解决方案。正在寻找一种将数据从Express会话传递到Angular应用程序的方法。如果您使用的是hogan.js,这将有助于将变量传递到视图中链接现在已失效,而此方法对我不起作用。什么是#{符号?Zemirco的链接在这里仍然有效-我花了一些时间试图实现这一点,但这个答案确实不够完整。你的“预加载”是什么?
    div(ng-controller="UserCtrl", ng-init="user=" + JSON.stringify(user) )