parseInt不将多个字符串转换为int

时间:2014-06-25 04:52:54

标签: angularjs

这是一个非常简单的但不是没有为什么我无法解决它。

我正在尝试将字符串转换为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);
  }
});

DEMO PLUNKER

3 个答案:

答案 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);
}