Angular是Google开发的前端技术框架。
在使用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(); //强制通知
});