【问题标题】:View Not updating- Angular查看未更新 - Angular
【发布时间】:2016-01-04 07:20:59
【问题描述】:

索引文件中的视图没有更新。这是代码片段。

索引:

<body class="container" ng-controller="indexController">
  <div ng-if="isLogin">
      <div class="wrapper">
          <div ng-include="src/partial/header.html"></div>
          <div ng-include="src/partial/leftNavBar.html"></div>
          <div ui-view></div>
          <div ng-include="src/partial/footer.html"></div>
      </div>
  </div>
  <div ng-if="!isLogin">
      <div ui-view></div>
  </div>
  </body>

索引控制器:

.controller('indexController', indexController);
        function IndexController(global, $scope){

            function setupLogin(){
                $scope.isLogin = global.getLogin();

            };
            $scope.$on('UPDATE_Login', setupLogin);
        }

和我的登录控制器:

.controller('Login', Login);

  /* @ngInject */
    function Login(auth, $location, global, $scope){
        var vm = this;

        vm.loginBtn = function login(credentials){
            vm.dataLoading = true;
            auth.loginService(credentials).then(function (result){
                vm.dataLoading = false;
                if(result.responseCode === '00'){
                    global.setLogin(true);
                    $scope.$broadcast('UPDATE_Login');
                    $location.path('/default');
                }else {
                    vm.errorMessage = result.responseDescription;
                }
            });

        }
}

我面临的问题是,当登录控制器的范围广播时,它不显示并包括我的部分页眉导航和页脚文件。

我在这里错过了什么吗?

【问题讨论】:

  • 为什么要检查 result.responseCode === '00' - 这是你要返回的东西吗?您应该真正遵循 REST 约定,即返回 200。另外我认为您应该使用 $rootScope.$broadcast 而不是 $scope.$broadcast。
  • 是的,这是我要回归的东西。它检查服务器是否已对用户进行身份验证
  • 我怀疑这一行是罪魁祸首 - $location.path('/default');我认为你应该在 setupLogin 函数中编写这一行(在设置 $scope.isLogin = global.getLogin( );).
  • 我建议您尝试改用$rootScope.$broadcast

标签: angularjs angularjs-scope angular-broadcast


【解决方案1】:

您是否尝试过将setupLogin() 包裹在timeOut 中:

.controller('indexController', indexController);
    function IndexController(global, $scope,$timeout){

        function setupLogin(){

            $timeout(()=>{
                $scope.isLogin = global.getLogin();
              },100); 

        };
        $scope.$on('UPDATE_Login', setupLogin);
    }

有时它有助于解决此类问题

祝你好运

【讨论】:

    猜你喜欢
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    相关资源
    最近更新 更多