这是一个非常简单的但不是没有为什么我无法解决它。
我正在尝试将字符串转换为json中的整数,它会转换第一个对象但不会转换为第二个对象:
HTML:
<body ng-controller="myApp">
<ul ng-repeat="vals in json_arr" ng-init="parseId(vals)">
<li>
<input type="number" ng-model="vals.id" />
</li>
<li>
<input type="number" ng-model="vals.id1" />
</li>
<li>
<input type="number" ng-model="vals.id2" />
</li>
</ul>
</body>
控制器:
app.controller('myApp', function($scope) {
$scope.json_arr = [{
'id': '1',
'id1': '2',
'id2': '3'
}];
$scope.parseId = function(val) {
val.id = parseInt(val.id);
}
});
答案 0 :(得分:1)
Aahhhhh这是我的错误,在parseId
函数中我只解析val.id
。
正确的1是:
$scope.parseId = function(val) {
val.id = parseInt(val.id);
val.id1 = parseInt(val.id1);
val.id2 = parseInt(val.id2);
}
答案 1 :(得分:1)
使用此代码更改您的代码
$scope.parseId = function(val) {
val.id = parseInt(val.id);
val.id1 = parseInt(val.id1);
val.id2 = parseInt(val.id2);
}
或者您可以更改您的json_arr变量,而不是将字符串更改为int
$scope.json_arr = [{
'id': 1,
'id1': 2,
'id2': 3
}];
答案 2 :(得分:0)
当在同一元素上定义时,指令按从最高优先级到最低优先级的顺序执行。 ng-repeat的指令优先级为1000,但ng-init的指令优先级为450。 ng-repeat也有一个终端属性 - 这意味着它是最后一个执行的指令,其后没有其他指令可以执行。这就是问题所在。 ng-repeat首先执行,因为它是终端,所以不允许在执行后执行ng-init。
要解决此问题,请将ng-init移至下面的第一个li:
<body ng-controller="myApp">
<ul ng-repeat="vals in json_arr">
<li ng-init="parseId(vals)">
<input type="number" ng-model="vals.id" />
</li>
<li>
<input type="number" ng-model="vals.id1" />
</li>
<li>
<input type="number" ng-model="vals.id2" />
</li>
</ul>
</body>
这是有效的,因为ng-model的优先级为0,因此它将在ng-init之后执行。
<强> [编辑] 强>
我意识到您发布的代码中存在逻辑错误。其他两个答案已经解决了,但我会在这里再次发布完整性:
$scope.parseId = function(val) {
val.id = parseInt(val.id);
val.id1 = parseInt(val.id1);
val.id2 = parseInt(val.id2);
}