【问题标题】:Select default radio button option based on value coming from server根据来自服务器的值选择默认单选按钮选项
【发布时间】:2015-04-02 05:32:11
【问题描述】:

我正在使用 angularjs 编写一个测验引擎,并且已经能够使用选项成功加载问题,并且还实现了 NEXT 和 BACK 按钮,现在可以正常工作,但是我希望当用户单击 BACK 或 NEXT 按钮时如果问题已被回答,它会与先前的选择一起预先选择。

每个问题都有 4 个选项,我在选项名称“IsSelected”上有一个属性,我用它来确定用户之前选择的选项。

我希望这样当用户交叉检查答案时,默认情况下应该检查之前选择的任何选项,这是我目前卡住的地方。我看过这个问题

Need to Default select an Angular JS Radio Button 它解决了在设置默认值方面类似的问题,但不完全是这样。

HTML 代码:

<div class="col-lg-offset-2 col-lg-5" data-ng-repeat="item in items" style=" border:#000 1px solid;padding:10px 40px 40px 40px">
        <h3 style="color: #0000ff">Question <b style="color:red">{{item.QId}}</b> of <b style="color:green">{{item.QCount}}</b></h3>
        <div>


            <!--<div id="first">{{item.QId}}</div>-->
            <h2>{{item.QId}}. {{item.QText}} </h2>
        </div>
        <div data-ng-repeat="choice in item.AnswerCh">

            <input type="radio" name="choize" data-ng-model="choice.IsSelected" value="choice.IsSelected" /> {{choice.Text}}

        </div>
        <br />
        <div id="ref" style="display: none">{{item.QId}}</div>
        <div id="you">{{choice.choize.Text}}</div>

JS代码:

        $scope.getNext = function () {    
            var quet = $('#ref').html();
            var answ = $('#you').html();
            cbtFact.getNext().update({q:answ,v:quet },
            function (data, status, headers, config){         
                $scope.items = [];
                
                $scope.items = data;
            },
            function (data, status, headers, config) {
            });
        };

        $scope.getPrevious = function () {
            var quet = $('#ref').html();
            var answ = $('#you').html();
            cbtFact.getPrevious().update({ q: answ, v: quet },
            function (data, status, headers, config) {
                $scope.items = [];
                $scope.items = data;
             
            function (data, status, headers, config) {
            });

        };
        

【问题讨论】:

  • 您的代码 sn-p 不起作用,请制作 jsFiddle 以便我们为您提供帮助..... :jsfiddle.net
  • @Prog 我创建了一个小提琴 jsfiddle.net/kennymore007/dv6cfcud ,我希望默认选择 IsSelected=true 的那个。谢谢

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


【解决方案1】:

这样使用ng-if怎么样..

Fiddle

<div data-ng-repeat="choice in item.AnswerCh">
   <span ng-if="choice.IsSelected">
      <input type="radio" name="choize" data-ng-model="choice.IsSelected" value="choice.IsSelected" checked/> {{choice.Text}}
   </span>
   <span ng-if="!choice.IsSelected">
      <input type="radio" name="choize" data-ng-model="choice.IsSelected" value="choice.IsSelected" /> {{choice.Text}}
   </span>
</div>

或使用 Angular Js ngChecked 属性

Fiddle

 <div data-ng-repeat="choice in item.AnswerCh">    
     <input type="radio" name="choize" data-ng-model="choice.IsSelected" value="choice.IsSelected" data-ng-checked="choice.IsSelected" /> {{choice.Text}}    
 </div>

更新:

使用ng-modelng-value

Fiddle

虽然上述两个代码都可以正常工作,但与 ng-model 一起工作时遇到了一些问题。

根据 Angular Js documentation,这个功能可以像这样使用 ng-model 和 ng-value 本身来实现,所以这应该是推荐的方式。 ng-value 应该是选择表达式时应设置的值。

<div data-ng-repeat="choice in item.AnswerCh">
        <input type="radio" name="choize" data-ng-model="choice.IsSelected" ng-value="true" /> {{choice.Text}}       
 </div>

【讨论】:

  • 我试过 ngIf 它没有给我想要的结果。我创建了一个小提琴 jsfiddle.net/kennymore007/dv6cfcud。我希望它默认选择 IsSelected=true 的那个。谢谢
  • 如果你在同一个小提琴中更改为更高版本的 Angular,实际上逻辑是有效的,我们也必须将检查更改为 ngChecked
  • 我已经更新了小提琴以包含逻辑并升级到更高的角度版本,但仍然无法正常工作。我需要更改数据类型还是什么?请问你能帮我克隆小提琴并告诉我那里出了什么问题吗?谢谢..
  • 感谢您的示例。他们很清楚,只有当我将模型更改为choice.IsSelected 时使用第三个小提琴(结合了ng-model 和ng-value 的那个)。我不再获得选择的 Text 属性的值。如何获取所选选项的文本属性?我需要将选择发布到服务器。我试图解决它无济于事。再次感谢。
  • 我会再检查一遍,同时,如果您发现示例有用,请投赞成票。
猜你喜欢
  • 2014-05-19
  • 2018-06-03
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
相关资源
最近更新 更多