【问题标题】:AngularJS - Broadcasting across controllersAngularJS - 跨控制器广播
【发布时间】:2012-09-11 14:00:47
【问题描述】:

我正在尝试一个我登录的场景,并且在成功时想要存储该 LoginID 并将其传递给所有其他控制器以进行导航/用户管理。类似于设置全局变量,存储一次使用无处不在的概念。

一直在使用 angularjs 共享服务技术,但它没有在其他控制器中选择 braodcaster LoginID。

高级细节:

1) 登录 HTML 调用登录控制器,我从这里调用后端服务器进行用户身份验证 2) 成功时,通过共享服务广播 LoginID 3) 从登录 HTML,页面导航到 OrderMenu Html 并调用 OrderMenu 控制器,试图获取通过共享服务广播的用户 ID。 4) 但在 Order Menu 控制器中,显示的 UserID 是初始化值,即看起来 app.factory 再次被调用并初始化 Broadcasted 值。

我想停止重新加载 app.factory。看起来我在这里遗漏了一些东西。任何想法在这里都会很有帮助。

【问题讨论】:

标签: javascript html angularjs


【解决方案1】:

这是您所描述的快速实施示例。 它似乎正在工作。

http://plnkr.co/edit/SPAB4W

我的服务定义如下:

app.factory('UserAuth', function() {
  return {
    userId: 'unknown',
    authenticate: function( name ) {
      // do server side authentication here...
      this.userId = 'authenticatedUserId_Of_' + name;
    }
  };
});

在本例中,当第二个控制器 (OrderCtrl) 被调用时, UserAuth.userId 没有重新初始化 并保留获得的身份验证所提供的 userId。

您可能想分享您的代码。

【讨论】:

  • 感谢@tosh shimayama,马克为你的cmets。我的问题是控制器本身的初始化+加载。非常感谢 tat plunker tosh。
  • @Aki 我很想听听您是如何解决您的问题的,因为我目前面临着类似的问题。可以提供代码吗?
猜你喜欢
  • 1970-01-01
  • 2013-09-30
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 2017-12-03
  • 2015-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多