【问题标题】:AngularJS binding radio buttons to booleans across multiple objectsAngularJS 将单选按钮绑定到多个对象的布尔值
【发布时间】:2015-04-27 17:59:53
【问题描述】:

我正在尝试将一组对象绑定到一组单选按钮组。我已经到了它基于模型生成组并根据布尔值selected 预先选择正确的单选按钮的地步,但是我无法弄清楚如何将绑定项目的值切换为 true 和 false 时单选按钮值更改。基本上,我希望这些功能类似于互斥复选框。我可能可以用实际的复选框来做到这一点,但显然单选按钮是理想的,因为这是它们的预期目的。

JSFiddle 为您提供方便:http://jsfiddle.net/uv9mwkwd/5/

HTML:

<div ng-app ng-controller="Extensions">
    <div ng-repeat="propertyGroup in propertyGroups">
        {{propertyGroup.label}}
        <div ng-repeat="prop in propertyGroup.properties">
            <input type="radio" ng-model="prop.selected" name="prop{{propertyGroup.alias}}" ng-value="true" /> {{prop.value}}
        </div>
    </div>
</div>

脚本:

function Extensions($scope) {
  $scope.propertyGroups = [
    {'label': 'Property 1',
     'alias': 'property1',
     'properties': [{value: 'Value 1', selected: true},{value: 'Value 2', selected: false}]},
    {'label': 'Property 2',
     'alias': 'property2',
     'properties': [{value: 'Value 1', selected: false},{value: 'Value 2', selected: true}]}
  ];
    console.debug($scope.propertyGroups);
}

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    问题是您试图将“选定”值单独连接到每个单独的单选按钮。相反,将其放在模型的 propertyGroup 部分。

    jsFiddle example

    $scope.propertyGroups = [
        { label : 'Property 1',
          alias : 'property1',
          selected : 'Value 1', // <---------- this stores which value is checked
          properties: [{value: 'Value 1'},{value: 'Value 2'}]},
        { label : 'Property 2',
          alias : 'property2',
          selected : 'Value 2', // <---------- this stores which value is checked
          properties : [{value: 'Value 1'},{value: 'Value 2'}]}
    

    ];

    在您的 HTML 中,请注意您的 ng-model 正在查看单选按钮的整体 group 以匹配“值”

       <div ng-repeat="prop in propertyGroup.properties">
    
            {{ propertyGroup.selected }} 
            <!-- ^ this is just so you can see it change the model-->
    
            <input type="radio" 
                   ng-model="propertyGroup.selected" 
                   name="prop{{propertyGroup.alias}}" 
                   ng-value="prop.value" /> {{prop.value}}
        </div>
    

    【讨论】:

    • 幸运的是,我能够根据自己的需要调整模型,所以这对我有用,但是我仍然很好奇如何在不调整模型的情况下实现这一点,例如在以下情况下我收到的模型来自第三方,发布的更新需要我发布相同的模型结构。
    • 不幸的是,这是唯一的方法......如果您想添加这种功能,您必须自己手动创建和更新模型。
    猜你喜欢
    • 2023-03-18
    • 2013-06-02
    • 2018-01-29
    • 1970-01-01
    • 2013-04-23
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    相关资源
    最近更新 更多