【问题标题】:Scope value not updating in view in IONIC 1 and Angular jsIONIC 1 和 Angular js 中的范围值未更新
【发布时间】:2018-01-17 17:35:53
【问题描述】:

我有一个要求,比如保存两个以前的登录详细信息。 我已经完成了。但是我的视图只会在刷新时更新。但是范围值会更新。

尝试使用scope.apply,digest,timeout。但这里似乎没有任何效果。

$scope.loginUserName=localStorage.getItem("loginUserName");

$scope.userName=localStorage.getItem("userName");
$scope.mobileNumber=localStorage.getItem("mobileNumber");


$scope.loginData = {};

$scope.userLogin = function(loginData) {
userService.userLogin(loginData).then(function(success) {
  var res=success.message;
  if(res==='success'){
    if(localStorage.getItem("userName1")==null || localStorage.getItem("userName1") == success.firstName){
    localStorage.setItem("userName1",success.firstName);
    localStorage.setItem("loginUserName",success.firstName);
    }else if(localStorage.getItem("userName2")==null || localStorage.getItem("userName2") == success.firstName ){
    localStorage.setItem("userName2",success.firstName);
    localStorage.setItem("loginUserName",success.firstName);
    }
    localStorage.setItem("userName",success.firstName);
    $scope.userName=success.firstName;
    $scope.mobileNumber = success.mobileNumber;
    $scope.loginData = {};
    $state.go('app.home');
  }else{
    $scope.message ='Wrong pin.Try again or click Forgot password to reset it.';
  }
},function(error){

});

};

$scope.loginPerson = function(mobileNumber,userName){
localStorage.setItem("loginUserName",userName);
// here userName is updating,but not reflecting in view
$scope.loginUserName=localStorage.getItem("loginUserName");
//setTimeout(function(){ $scope.$apply(); });
console.log("In loginPerson:"+userName);
$state.go('app.start');

}

start.html

 <span ng-if="loginUserName !=null">
      <p class="startP">Enter pin for {{loginUserName}} 
<i class="icon ion-chevron-down" ui-sref="app.loginOptions">
        </i></p>
     </span>

  //Here is the state details,I have same controller for two state.

  .state('app.loginOptions', {
  url: '/loginOptions',
  views: {
  'menuContent': {
    templateUrl: 'templates/loginOptions.html',
    controller:'LoginCtrl'
   }
  }
 })

 .state('app.start',{
 url:'/start',
 views:{
  'menuContent':{
    templateUrl:'templates/start.html',
    controller:'LoginCtrl'
   }
 }

编辑

我也在对象内使用过,但没有任何改变。

【问题讨论】:

    标签: html angularjs ionic-framework scope


    【解决方案1】:

    第 1 步)请在从 localstorage 获取数据到 $scope $scope.xyz=angular.copy(localstorage.get('key')) 时使用 angular copy

    在执行步骤 1 之后,在 $scope 中设置值后使用 $scope.$apply(); 不起作用。

    【讨论】:

    • 感谢您的回复.. Error: [$rootScope:inprog] $apply already in progress
    • 如果Error: [$rootScope:inprog] $apply already in progress。然后尝试将其包装在 $timeout() 中。
    【解决方案2】:

    尝试使用loginUserName 作为对象的属性,而不是直接使用作用域的属性。有时 angularjs 无法更新这些值的视图。

    喜欢

    $scope.data={
     loginUserName:""
    };
    

    然后在你的函数内部

    $scope.userLogin = function(loginData) {
     ...
    
     $scope.data.loginUserName=localStorage.getItem("loginUserNa‌​me");
    // To check it
    console.log($scope.data);
    
    }
    

    html

     <span ng-if="data.loginUserName !=null">
      ...
         </span>
    

    更新

    如下更改 loginPerson 函数。

    $scope.loginPerson = function(mobileNumber,userName){
      localStorage.setItem("loginUserName",userName);
    
    $scope.data.loginUserName=localStorage.getItem("loginUserName");
    
    console.log("In loginPerson:"+userName);
    console.log($scope.data);
    
    }
    

    【讨论】:

    • $scope.login={}; $scope.login.loginUserName=localStorage.getItem("loginUserName");
    • 和以前一样在控制器中工作,但是在视图中我得到了空对象
    • 实际上在我粘贴的代码中。视图将反映在页面刷新上。我要不刷新
    • @Hema 这个loginUserName什么时候更新?调用$scope.loginPerson函数时,是否由按钮点击触发。
    • 是的.. ng-click会触发
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 2014-02-13
    相关资源
    最近更新 更多