angular.js为什么双向绑定要点一下才生效

showCaptcha设置了true为什么要在页面上点击一下才能显示,和vue双向绑定有区别吗?用的1.2

 <div class="ipt_con" ng-show="login.showCaptcha"></div>
    $scope.login = {
        showCaptcha: false,
    }
    $scope.connect = function () {
        Service.login(phone, $scope.login.password).then(function (data) {
            $scope.logining = false;
            if (data.code == 0) {
                ...
            } else {
                $scope.login.showCaptcha = true;//这里置为了true为什么div需要点击才能显示,
                console.log( $scope.login.showCaptcha)
            }
        })
    }
阅读 2.7k
3 个回答

Angularjs里面的脏检查机制在处理异步流的时候可能无法监测,这个时候使用$scope.$apply();可以强制检测,而关于点一下就可以,是因为angularjs监听了所有的事件,包括xmlHttpRequest的事件,并且在事件里面调用了$scope.$apply(),所以点一下其实也是调用了$scope.$apply()

$scope.login.showCaptcha = true;
$scope.$apply(); // 加这句

试一下。

新手上路,请多包涵

主要是因为Angularjs脏治检测没有检查到,可以使用$scope.$apply(),但是不推荐使用这个,因为$apply是从根组件向下执行进行脏值检测。推荐使用$scope.$digest(),$digest是从当前组件向下进行脏治检测。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进