Javascript 从分离视图更改事件的范围变量';角速度控制器?

Javascript 从分离视图更改事件的范围变量';角速度控制器?,javascript,angularjs,Javascript,Angularjs,假设您有一个登录系统,其中导航位于“主”视图中,并且永不更改,它还包含一个用于用户名的占位符ng模型: $scope.userName = Session.userName(); 然而,这是被分配一旦页面加载,这是坏的。如何使登录控制器在$http请求返回成功后立即在maincontroller上更改此变量 $scope.login = function() { $http.post('http://restfulservice.com', angu

假设您有一个登录系统,其中导航位于“主”视图中,并且永不更改,它还包含一个用于用户名的占位符ng模型:

$scope.userName = Session.userName();
然而,这是被分配一旦页面加载,这是坏的。如何使登录控制器在$http请求返回成功后立即在maincontroller上更改此变量

$scope.login = function() { 
        $http.post('http://restfulservice.com', 
            angular.toJson($scope.loginUser))
    .success( function (data, status, headers, config) {
            if (data.out) {
            var data= JSON.parse(data.out);
            Session.userName(data.Nombre);
            Session.memorizarId(datos.idCliente);
            Session.memorizarLogged(true);
      }

您可以查看angularJs事件机制
$broadcast
$emit

登录成功后,您可以广播一条消息,无论哪个控制器正在收听该消息,它都将获得广播的消息并相应地采取行动

$scope.login = function() { 
        $http.post('http://restfulservice.com', 
            angular.toJson($scope.loginUser))
    .success( function (data, status, headers, config) {
            if (data.out) {
            var data= JSON.parse(data.out);
            Session.userName(data.Nombre);
            Session.memorizarId(datos.idCliente);
            Session.memorizarLogged(true);

            //broadcast the message passing the user info optionally
            $rootScope.$broadcast('user-logged-in', data);
      }
内部主控制器

$rootScope.$on('user-logged-in', function (user) {
  $scope.userName = Session.userName();
  //Or using the broadcasted user object
  $scope.userName = user.Nombre;
});
来自angularJs文档:

事件生命周期从创建$broadcast的作用域开始 打电话。在此作用域上侦听name事件的所有侦听器都将获取 通知。之后,事件会传播到所有直接和间接事件 并调用所有已注册的侦听器 顺便说一下。无法取消该事件


$rootScope.Scope

使用服务将是更好的选择..只需更新服务变量将反映所有地方..注意服务数据应该在对象中..只有一个问题,因为我以前见过编写这些事件,但是“用户登录”做什么?它从哪里来,有什么用?我可以理解$stateChangestart将取代它,但这似乎是自定义的。
用户登录
只是为事件指定的名称,因此任何想要订阅此事件的人都可以使用此事件名称。