javascript - AngularJS radio 表现得很奇怪

标签 javascript angularjs

我正在使用这种方法:

<tr class="radio-row" ng-repeat="topurchase in vm.firmstopurchase">

                    <td >
                        <input type="radio" ng-model="color" value="red">
                        {{ topurchase.name }}</td>

                </tr>

但在我的代码中,我可以以某种方式选择其中多个,并且它们有奇怪的名称:

在 ng-repeat 完成后查看源代码时,我看到:

<input type="radio" ng-model="color" value="red" class="ng-valid ng-not-empty ng-dirty ng-valid-parse ng-touched" name="38" style="">

每个 ng-repeat 循环的所有不同的 name 属性。

为什么会这样?我怎样才能用颜色来调用它?因为目前无法工作..

最佳答案

您是这里范围继承问题的受害者。 Angular 中有一条规则 - “始终在 ng-model 中使用点。ng-repeat 创建一个新的子范围,并且任何没有点的 ng-model 在重复之外都无法访问。请参阅 Nuances of scope prototype inheritance 了解更深入的信息看看。

您似乎已经在使用 Controller As(您有 vm 绑定(bind))。使用vm.color会在这里提供帮助。

此外,一旦这些都正确连接到 Controller ,它们都会同时选择,因为您将它们的所有值设置为相同的值。您可以使用ng-value将 radio 连接到对象或对象的属性。 (例如,ng-value="topurchase" 会将 ng-model 设置为特定对象,或者 ng-value="topurchase.name" 将其设置为等于 name 属性。

总而言之,更改 ng-model引用您的 Controller ,并使用 ng-value而不是value .

var app = angular.module('plunker', []);

app.controller('MainCtrl', function() {
  var vm = this;
   vm.firmstopurchase = [
     {name: 'red', number: 1},
     {name: 'blue', number: 2},
     {name: 'yellow', number: 3},
     ];
});
<!DOCTYPE html>
<html ng-app="plunker">

<head>
  <meta charset="utf-8" />
  <title>AngularJS Plunker</title>
  <script>
    document.write('<base href="' + document.location + '" />');
  </script>
  <link rel="stylesheet" href="style.css" />
  <script data-require="angular.js@1.5.x" src="https://code.angularjs.org/1.5.8/angular.js" data-semver="1.5.8"></script>
  <script src="app.js"></script>
</head>

<body ng-controller="MainCtrl as vm">
  <table>
    <tr class="radio-row" ng-repeat="topurchase in vm.firmstopurchase">

      <td>
        <input type="radio" ng-model="vm.color" ng-value="topurchase"> {{ topurchase.name }}</td>

    </tr>
  </table>
  {{vm.color}}
</body>

</html>
http://plnkr.co/edit/f2Cv5vr02sLHYsZyiYsf?p=preview

关于javascript - AngularJS radio 表现得很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39549066/

相关文章:

css - 复杂元素结构上的 Compass 和 SASS

javascript - 使用 HTML5 音频和 jQuery 调用对象 (this) 的引用

javascript - 当我的 Youtube 评论或 Messenger 消息加载时,如何运行 Chrome 扩展程序?

javascript - 如何在angular js中从前端获取下拉列表的选定值

javascript - 检查页面中 javascript 函数的可用性

javascript - 在 $ 'Ng-If' ).change 或 angularfire $add 上使用 "breaks"('#x' 程序

javascript - 选择所有级别的所有 child

javascript - 使用 CKEditor 5 将段落锁定在一起

javascript - 在 codeigniter 中使用 ajax 时出错

javascript - 在 AngularJS 中选择下载目录(浏览文件夹对话框)