JS对象比较函数,引发angular的ng-option异常

22 篇文章 0 订阅

比如我们会这样

$scope.typies = [{ id: 1, name: "设备柜" }, { id: 2, name: "综合柜" }];

<select ng-options=" f.name for f in typies" ng-model="cab.type"></select>


然后cab.type 会被赋值为cab.type  = { id: 1, name: "设备柜" }


之后你从后台返回的对象也是cab.type  = { id: 1, name: "设备柜" }


但是

angular再次渲染的效果是
<select ng-options=" f.name for f in typies" ng-model="cab.type" class="ng-pristine ng-valid ng-touched">
<option value="?" selected="selected"></option>
<option value="object:8" label="设备柜">设备柜</option>
<option value="object:9" label="综合柜">综合柜</option>
</select>
你会发现多了你不希望存在的一项option 
<option value="?" selected="selected"></option>






为什么?
因为你从后台接收的{ id: 1, name: "设备柜" }对象,和JS本地变量{ id: 1, name: "设备柜" }不是同一对象,尽管他们的Key和Value都一模一样(js的equal函数实现严格了)
解决这个BUG的方法:
就是为 cab.type 用$scope.typies的元素重新给它赋值
for( var i = 0; i < $scope.typies.length; i++ ) {
    if(cab.type.id == $scope.typies[i].id) {
        item.type = $scope.typies[i];
    }
}



                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值