AngularJS 的安全Apply

1
2
3
4
5
6
7
8
9
10
$scope.safeApply = function(fn) {
    var phase = this.$root.$$phase;
    if (phase == ‘$apply‘ || phase == ‘$digest‘) {
        if (fn && (typeof(fn) === ‘function‘)) {
            fn();
        }
    else {
        this.$apply(fn);
    }
};

使用NG的时候会遇到动态添加数据的情况,有可能在你动态添加数据后页面因为渲染已经完成了导致新添加的数据在页面中无法展示

如使用select标签:

1
2
3
<select id="uidSelect" class="sel" ng-model="sid" ng-init="" ng-options="user.name for user in users">
  <option value="" default>-Select one-</option>
</select>

因为开始的时候users数组的数据是固定的浏览器渲染出来后值就是固定的,那么如果在这之后我们想往users里面添加数据这个下拉选项是不会有改变的,这时候度娘上的各种攻略会告诉你加上 scope.apply() 就可以了...但是加好以后有可能会出现 [rootScope:inprog]apply already in progress 这样的错误信息,那么这时候只需要使用最上面提供的方法就可以了,

先把最上面的 safeApply 方法加入你的 scope 里面,然后动态添加完数据后 使用 $scope.safeApply(); 就可以了....

posted on   荣锋亮  阅读(438)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示