Angular-fullstack 获取当前用户 ID
Posted
技术标签:
【中文标题】Angular-fullstack 获取当前用户 ID【英文标题】:Angular-fullstack get current user ID 【发布时间】:2015-05-12 00:38:45 【问题描述】:我正在使用https://github.com/DaftMonk/generator-angular-fullstack。
我有 2 个架构:
图表 标题:字符串 数据集:数组 _creator:登录用户ID 用户 姓名 电子邮件 _id当我 console.log 当前用户返回
$scope.getCurrentUser = Auth.getCurrentUser();
console.log($scope.getCurrentUser);
但是当我尝试通过控制台记录 _id 时:
$scope.getCurrentUser = Auth.getCurrentUser();
console.log($scope.getCurrentUser._id);
返回
未定义
谁能解释我做错了什么?
【问题讨论】:
也许你应该从 Angular 教程开始,阅读 javascript 的异步执行。谷歌的“角度承诺”。基本上,请求还没有解决,你要等待它被加载... 那为什么当我 console.log 它返回整个对象但 ._id 它未定义? 我不知道 angular-fullstack,但Auth.getCurrentUser()
返回一个承诺,而不是你的 currentUser
。您需要以下内容:Auth.getCurrentUser().then(function(result)// do something with result; result should be your currentUser);
@Marius:当你传递一个引用时,控制台是一个观察者,而._id
会被立即评估
除了这个问题,isLoggedIn
也没有正确更新。一些前端元素通过 ng-show/hide 依赖它。登录后,该函数仍然返回false,直到我刷新页面。有什么线索吗?
【参考方案1】:
chrome 控制台中的对象仅在首次打开时才被评估。
这意味着当你 console.log 一个像 Auth.getCurrentUser()
的返回值的对象时,控制台会显示一个对它的引用 - 这在日志调用时包含一个 promise 对象,但它很可能由当你在控制台上打开它时,你就会看到你正在寻找的属性。
另一方面,当您记录 $scope.getCurrentUser._id
时,这是对 Promise 对象进行属性查找的结果 - 它会打印属性的当前值,即 undefined
。
关于干净代码的注意事项:您的作用域变量称为 getCurrentUser,这让人认为它是一个 getter 函数,但实际上它是一个 getter 函数的返回值。这令人困惑。
【讨论】:
如果您查看getCurrentUser
的实现,您会发现它可以同步和异步工作。如果您不提供参数(如回调函数),它应该同步响应。不幸的是,情况并非如此。我错过了什么吗?
@molerat 我知道你来自哪里,但你可以在 OP 的屏幕截图中看到一个 Promise 对象已返回给他。您的推理似乎是正确的,但也许当时的实施有所不同? (已经 1.5 年了......)无论哪种方式,您似乎都指出了与 OP 的最新 cmets 稍微无关的问题,我建议改为打开一个新问题。以上是关于Angular-fullstack 获取当前用户 ID的主要内容,如果未能解决你的问题,请参考以下文章
在 angular-fullstack 应用程序中更新后单个帖子不同步
如何部署 yeoman angular-fullstack 项目?
在 Angular-fullstack 中加载 local.env.js
如何使用 angular-fullstack 生成器语法使用 $scope 和 $watch?