2012-09-19 48 views
1

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

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

高层次的细节:

1)登录HTML从我来自哪里登录HTML打回电话询问用户认证 2)在成功结束服务器,通过共享服务 3广播登录ID)调用登录器,网页浏览到OrderMenu Html并调用OrderMenu控制器,试图获取通过共享服务广播的用户标识。 4)但在Order Menu控制器中,显示的UserID是初始化值,即看起来像app.factory被再次调用并初始化广播值。

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

+0

你可以提供一个jsFiddle(http://pkozlowskios.wordpress.com/2012/08/12/using-jsfiddle-with-angularjs/),只显示userID问题,或者至少是服务代码以及控制器与服务交互? –

回答

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认证的内容。

您可能想分享您的代码。

+0

谢谢@tosh shimayama,马克对你的评论。我的问题是初始化+加载控制器本身。非常感谢塔克尔托克。 – Aki

+1

@Aki我很想听听你如何解决你的问题,因为我目前面临类似的问题。你能提供代码吗? – abstractpaper