Angular 1.x下 select 的一个巨大的坑

本文解决了一个在Angular中使用双向绑定时出现的问题,特别是在<select>元素上绑定非字符串类型的值时遇到的难题。通过自定义指令的方式成功实现了对数值类型选项的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

双向绑定这个特性有时让人又爱又恨

假设控制器

function($scope){

$scope.options = [{name:”alex”,id:232,…},{…},{…}…];

$scope.myModel = {name:”alex”,id:232};

}

<select ng-model=”myModel.id”>

<option value=””>—请选择—</option>

<option ng-repeat=”opt in options” value=”{{opt.id}}” >

{{opt.name}}

</option>

</select>

ok,这段看起来很寻常的代码会出现问题

inspect一下

fenmgo2f9n3daro0b6

?number:45?

多次调试发现不是程序写得有问题

这个是angular中select的一个缺陷

以下是官方说法

To bind the model to a non-string value, you can use one of the following strategies:

  • the ngOptions directive (select)
  • the ngValue directive, which allows arbitrary expressions to be option values (Example)
  • model $parsers / $formatters to convert the string value (Example)

然而我尝试了ngOptions时依然无效

最终解决方案:

app.directive(‘convertToNumber’, function () {
return {
require: ‘ngModel’,
link: function (scope, element, attrs, ngModel) {
ngModel.$parsers.push(function (val) {
return val != null ? parseInt(val, 10) : null;
});
ngModel.$formatters.push(function (val) {
return val != null ? ” + val : null;
});
}
};
});

转载于:https://www.cnblogs.com/AlexNull/p/5992344.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值