angularjs select ng-options延迟更新

Angular是Google开发的前端技术框架。

来源: Angular中文社区 | Angular中文社区

在使用angularjs的ng-options时,在后台更改了scope里对应的数组后,前段的select里的option不会马上更新,而是选择了某项后才会更新

前端代码如下

<select ng-options="option.id as option.name for option in options"
    ng-model="item" ng-change="update()">

Controller里的代码

$scope.options = [{name:'aa',id:1},{name:'bb',id:2}];//初始化时候的值
socket.on('sites',function(data){
        $scope.options = data;//socket.io更新该值
    });

现在的问题就是socket.io更新完$scope.options前端select里的值不会马上更新,要点下更改select里的选项后才会更新

其实并不是“在更改了select里的选项后才更新”,而是因为响应了sites事件后的数据更新操作被没有被视图得知。因为你的socket实际是个游离在$scope之外的操作,所以双向绑定在这里没有生效。

那为什么”在更改select之后”它却刷新了呢?原因也简单,因为你这次的操作又重新回到了$scope的生命周期之中,所以双向绑定监测到了$scope.options的变化。

解决方法超简单,就是强制通知angular你的数据更新了:

$scope.options = [{name:'aa',id:1},{name:'bb',id:2}];//初始化时候的值
socket.on('sites',function(data){
        $scope.options = data;//socket.io更新该值
        $scope.$apply(); //强制通知
    });
分享到: 更多 (0)