在Angular中从分隔视图的控制器更改事件的范围变量?

时间:2015-06-02 19:30:19

标签: javascript angularjs

假设你有一个登录系统,导航系统位于" main"从不改变的视图,它还包含用户名称的占位符ng模型:

$scope.userName = Session.userName();

但是,只要页面加载就会分配,但这很糟糕。如果$ http请求返回成功,我将如何使登录控制器在主控制器上更改此变量?

$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);
      }

1 个答案:

答案 0 :(得分:0)

您可以查看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的范围开始   调用。所有侦听此范围内的名称事件的侦听器都会获得   收到通知。之后,事件传播到所有直接和间接   当前范围的范围并调用所有已注册的侦听器   方式。该活动无法取消。

https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope