ng-change事件仅在ng-repeat内部触发一次

时间:2017-02-16 17:37:44

标签: javascript angularjs

在我的表单中,我使用了两个单选按钮,并希望检查所选值。但这并不像预期的那样有效。我想确定单个无线电选择值并在结果列中显示大/小

<div ng-controller="CityCtrl">
  <table>
    <tr>
      <th>Name</th>
      <th>Big</th>
      <th>Small</th>
      <th>Result</th>
    </tr>
    <tr ng-repeat="city in cities">
      <td>{{ city.name }}</td>
      <td>
        <input type="radio" name="{{city.name}}-{{$index}}" ng-model="big" value="big_value" ng-change="check(city.name, big)">
      </td>
      <td>
        <input type="radio" name="{{city.name}}-{{$index}}" ng-model="small" value="small_value" ng-change="check(city.name, small)">
      </td>
      <td>***</td>
    </tr>
  </table>
</div>

控制器:

var myApp = angular.module('cityApp', []);

function CityCtrl($scope) {
  $scope.big = '';
  $scope.small = '';
  $scope.cities = [{
    id: 1,
    name: 'Tokyo'
  }, {
    id: 2,
    name: 'Guangzhou'
  }, {
    id: 3,
    name: 'Seoul'
  }];

  $scope.check = function(city, value) {
    console.log("City->" + city + " ::: Value->" + value);
  };
}

从其他答案我推断了一些事情:

  1. 了解JS中的原型继承?!
  2. ng-repeat创建影响ng-repeat
  3. 内部这些无线电的子范围
  4. 在收音机中使用ng-modal上的$ parent
  5. 我确实玩过,但是无法做到这一点,我想我在这里犯了一些明显的错误。

    这是小提琴: http://jsfiddle.net/mw2us37h/

    注意: 我没有使用ng-value而是传递硬编码值。 更改为ng-click也不起作用

2 个答案:

答案 0 :(得分:2)

将此标记为重复,但在使用angularjs中的单选按钮时,似乎解决方案是使用ng-click而不是ng-change

以下是您的小提琴编辑:http://jsfiddle.net/mw2us37h/1/

答案 1 :(得分:0)

我不确定我理解你的尝试。我想你想在结果列中显示单选按钮值和/或在点击值的位置有一个函数。

显示结果列中的单选按钮值
我会更改ngModel值,以便它绑定到某个特定城市。所以改变:

<input type="radio" name="{{city.name}}-{{$index}}" ng-model="big" value="big_value">

为:

<input type="radio" name="{{city.name}}-{{$index}}" ng-model="city.size" value="big_value">

<input type="radio" name="{{city.name}}-{{$index}}" ng-model="small" value="small_value">

<input type="radio" name="{{city.name}}-{{$index}}" ng-model="city.size" value="small_value">

因此模型指向相同的变量city.size,这是保存所选值的位置。然后将结果列中的***更改为city.size 请参阅更改小提琴:http://jsfiddle.net/u2kxuyr7/

获取有关ngClick的价值

使用ngChange就像你已经做的那样,为了简单起见,我会做一些不同的事情。变化:

ng-change="check(city.name, whatEverValue)"

于:     NG-变化=&#34;检查(地点)&#34;

,检查功能如下:

  $scope.check = function(city) {
    console.log("City->" + city.name + " ::: Value->" + city.size);
  };

见小提琴:http://jsfiddle.net/Lmszxj8s/
然后在每次更改时触发ngChange。