angular1坑之ng-repeat

功能:有一个页面,输入查询条件,点击查询按钮后从后台返回数据并显示在页面的表格中,并在页面滚动到最下面时实现下拉加载。

下拉加载什么的前面的博客已经讲过了,这里不再讲了,这里主要是记录bug问题,在从后台返回数据并成功加到数组后面了,但是页面上并没有渲染出来,好怀念vue.js的v-for啊啊啊啊啊,然后就去上网找填坑的方法,说是要用$scope.$apply();好像跟什么脏值检测有关,ok,我在本地写了一个简单的页面试试水

test.html





    
    



    
{{x.Name}} {{x.Country}}

运行果然没问题,可以显示,看网上很多说是因为setTimeout或者用jquery的ajax等异步问题就会出现这种情况,因为angular本身存在脏值检测,但是由于你是异步,所以脏值检测已经过去了,所以页面才没有更新的,但是我不用setTimeout也非要用$scope.$apply()才能更新页面,更奇怪的是,如果我通过点击事件来改变时不需要$scope.$apply()就能及时更新,下拉加载就要。。。。什么鬼哦??

点击触发增加数据,完全不用$scope.$apply()





    
    



    
{{x.Name}} {{x.Country}}

那我就用$scope.$apply()吧,项目打包运行报错[$rootScope:inprog] $digest already in progress......说我加了$scope.$apply(),,,所以我到底该不该加???

解决办法:加个判断,如果它已经在做脏值检测就不用你多此一举,Prevent error $digest already in progress when calling $scope.$apply()

if(!$scope.$$phase) {
  //$digest or $apply
}

ps:理解Angular中的$apply()以及$digest()

你可能感兴趣的:(angular1)