【问题标题】:AngularJS - Binding radio button selection to model inside ng-repeatAngularJS - 绑定单选按钮选择以在 ng-repeat 内建模
【发布时间】:2014-06-14 13:38:56
【问题描述】:

我有一个数据模型 people,它采用以下形式:

personsInfo = {

              name: Adam
              dob: 31-FEB-1985
              docs: [  
              {
               docType: Drivers License,
               number: 121212,
               selected: false
               id: 1
              },
              { 
               selected: true,
               docType: None
              },
              { 
               docType: State ID,
               number: 132345,
               selected: false,
               id: 2
              }
             ]
            }

在我的标记中,我定义了以下内容以动态生成单选按钮。

<div ng-repeat="personDoc in personsInfo.docs">
  <input type="radio" name="personDocs" ng-model="personDoc.selected" value=""/>    

  {{personDoc.docType}} <span ng-hide="personDoc.docType === 'None'">Number: {{personDoc.number}}</span>
</div>

我希望能够检查在页面加载时选择为 true 的文档,然后根据用户选择的内容将所选标志保存在我的 peopleInfo 模型中。

我的目的是将personsInfo模型发送回另一个页面。

如果有人能指出我的工作小提琴,将不胜感激!

谢谢!

【问题讨论】:

  • 目前还不清楚您在这方面遇到了问题。模型没有像您期望的那样更新吗?您是否难以区分更改的文档?是返回给您感到困惑的服务器的请求吗?这篇文章需要澄清一下。
  • 您好帕特里克,感谢您的回复。我想我对所有部分都感到困惑。也许需要更改数据模型,数据绑定如何与单选按钮一起工作并将用户选择保存到原始模型中。
  • 如果您还没有使用过 Angular tutorial,我强烈推荐它,因为它涵盖了其中一些问题,但首先看起来您的单选按钮实际上只是在表达一个布尔值,所以为简单起见,我会将其转换为checkbox。然后模型将自动更新为正确的真/假值。
  • 我确实阅读了教程,并且我开发了一个非常复杂的应用程序,但我在单选按钮绑定方面遇到了问题。我不需要复选框,因为用户只能选择一个文档。您对更改数据模型有什么建议吗?以便我可以轻松地绑定到单选按钮?
  • 哦,哦,我明白你现在要做什么了。是的,我愿意;我会发布一个答案。

标签: javascript angularjs radio-button angularjs-ng-repeat angular-ngmodel


【解决方案1】:

您几乎就错过了显示所选文档的绑定。我们将向范围添加一个对象来表示所选项目,然后将表单绑定到该模型。

JS

app.controller('...', function($scope) {
    $scope.personInfo = { ... };
    $scope.selectedDoc = {};

    $scope.$watch('personInfo',function() {
        $scope.selectedDoc = $scope.personInfo.docs[0];
    });
});

HTML

<div ng-repeat='doc in personInfo.docs'>
    <input type='radio' ng-model='selectedDoc' value='doc' /> {{doc.docType}}
</div>

<form>
    <input type='text' ng-model='selectedDoc.number' />
    ...
</form>

【讨论】:

  • 谢谢帕特里克。您知道如何在初始化期间选择具有 selected 标志为 true 的文档吗?目前, selectedDoc 是空的,因此它不会预先选择任何文档。
  • 在这种情况下,它将始终检查第一个文档。我需要一种方法来检查所选属性为 true 的文档。
  • 此时它只是另一个JS对象。您可以循环浏览您的文档并找到被选中的文档。如果您使用下划线,$scope.selectedDoc = _.where($scope.personInfo.docs,{selected:true});
  • 帕特里克 - 感谢您的帮助。很抱歉,我一开始没有明确说明我是从异步 AJAX 调用中获取 personInfo 对象,而控制器不知道 personInfo 对象何时可用。所以我想我需要在服务器端初始化 selectedDoc 对象,然后将其绑定到模型。 personInfo 对象在父控制器中检索,子控制器在检索到 personInfo 后呈现它。
  • 太棒了。我最终结合使用 ng-checked 和 ng-click on 单选按钮来实现相同的功能。当用户单击单选按钮以将所选标志更改为 true 和其他文档的 false 时,我正在范围上调用一个方法。 ng-checked 将单选按钮设置为选中,如果 selected 为真。感谢您的精彩建议!我希望我能支持你的回答,但我在 SO..:(
猜你喜欢
  • 2022-11-11
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
  • 2014-04-11
  • 2013-07-14
  • 2017-06-24
  • 2015-05-07
相关资源
最近更新 更多