首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在AngularJs中获得选定的单选按钮值

无法在AngularJs中获得选定的单选按钮值
EN

Stack Overflow用户
提问于 2018-06-14 10:54:34
回答 2查看 610关注 0票数 0

我正在研究AngularJs(1.x),我动态地创建了单选按钮。单选按钮下面有一个“提交”按钮,它将选定的值发送到后端。

但问题是,我总是得到“未定义”作为选定的单选按钮值在我的控制器。你能告诉我哪里出了问题吗?

下面是我的HTML代码:

代码语言:javascript
复制
 <table>
           <tr ng-repeat="detail in details">
              <td><input type="radio" name="userinputs" ng-model="selectedValues[detail.path]" /></td>
              <td class="text">{{detail.created_time}}</td>
              <td class="text">{{detail.path}}</td>
            </tr>
      </table>
    <button type="button" ng-click="submitAction()> 

下面是我的控制器中的代码:

代码语言:javascript
复制
$scope.selectedValues = [];
$scope.submitAction = function(){
   console.log("selected values:",$scope.selectedValues); //empty array
}

有人能告诉我们什么是获取动态创建的单选按钮值的正确方法吗?

编辑:因为评论部分的一个人问我"details“数组看起来如何.”details“数组是一个对象数组。以下是样本:

代码语言:javascript
复制
[
  {
    "created_time": "2018-06-14 09:15:59.923639",
    "path": "hdfs://rhel-sp1-hadoop-mgr-1.node.dc1.pnda.local:8…da/flink/savepoints/savepoint-748ad1-284636263a29",
    "$$hashKey": "object:124"
  },
  {
    "created_time": "2018-06-14 09:17:33.913376",
    "path": "hdfs://rhel-sp1-hadoop-mgr-1.node.dc1.pnda.local:8…da/flink/savepoints/savepoint-748ad1-303080089004",
    "$$hashKey": "object:125"
  },
  {
    "created_time": "2018-06-14 09:22:17.562679",
    "path": "hdfs://rhel-sp1-hadoop-mgr-1.node.dc1.pnda.local:8…da/flink/savepoints/savepoint-748ad1-ea56f40fc986",
    "$$hashKey": "object:126"
  }
]
EN

回答 2

Stack Overflow用户

发布于 2018-06-14 11:10:18

在提交时,将ng模型值作为ng-click函数中的参数传递,如下所示

代码语言:javascript
复制
<table>
               <tr ng-repeat="detail in details">
                  <td><input type="radio" ng-value="detail" name="userinputs" ng-model="data.selectedValues" /></td>
                  <td class="text">{{detail.created_time}}</td>
                  <td class="text">{{detail.path}}</td>
                </tr>
          </table>
        <button type="button" ng-click="submitAction(data.selectedValues)"> 
票数 1
EN

Stack Overflow用户

发布于 2018-06-14 11:58:10

不能以这种方式使用ng-模型,在ng-模型中,只能分配与分配给它的html元素对应的值​​。示例:如果您在一个ng模型中使用它,它只会将true或false赋值给变量,因为这个无线电按钮或复选按钮只处理布尔值。

在您的例子中,您有几种解决问题的方法,具体取决于您想要做什么:

**Soluction 1:*如果要添加几个选定的值

代码语言:javascript
复制
 <table>
                    <tr ng-repeat="detail in details">
                       <td>
                         <input type="checkbox" name="userinputs" ng-click="addSelectedValue(detail)" ng-model="someModel" /></td>
                       <td class="text">{{detail.created_time}}</td>
                       <td class="text">{{detail.path}}</td>
                     </tr>
               </table>
             <button type="button" ng-click="submitAction()">Sugmit</button>

// JAVASCRIP代码

代码语言:javascript
复制
 $scope.selectedValues = [];

//add or remove selected value
$scope.addSelectedValue = function(value){
    let i = $scope.selectedValues.indexOf(value);
    // if values exist in array, remove  from selected values
    if(i>=0){
         $scope.selectedValues.splice(i,1);
    }
    //else add to selected values
    else{
        $scope.selectedValues.push(value);
    }
}
//submit values
$scope.submitAction = function(){
    $scope.selectedValues;
}

解决方案2: --如果您只想选择一个值,就更容易了

代码语言:javascript
复制
 <controller ng-controller="main">
                <table>
                    <tr ng-repeat="detail in details">
                       <td>
                         <input type="radio" name="userinputs" ng-click="selectedValue = detail" ng-model="someModel" /></td>
                       <td class="text">{{detail.created_time}}</td>
                       <td class="text">{{detail.path}}</td>
                     </tr>
               </table>
             <button type="button" ng-click="submitAction()">Sugmit</button>
            </controller>

// JAVASCRIPT

代码语言:javascript
复制
$scope.selectedValue = {};
//submit values
$scope.submitAction = function(){
    $scope.selectedValue;
}

在这两种解决方案中,我都使用ng-click事件来捕获值(您可以使用ng-change),重点是需要一些事件来为变量分配值。

但如果你想用ng模型,你可以这么做。

解决方案3

代码语言:javascript
复制
<controller ng-controller="main">
                <table>
                    <tr ng-repeat="detail in details">
                       <td>
                         <input type="radio" name="userinputs"  ng-model="detail.isSelected" /></td>
                       <td class="text">{{detail.created_time}}</td>
                       <td class="text">{{detail.path}}</td>
                     </tr>
               </table>
             <button type="button" ng-click="submitAction()">Sugmit</button>
            </controller>

// JAVASCRIPT

代码语言:javascript
复制
//submit values
$scope.submitAction = function(){
   //select all the values that are marked as selected
    let selectedValues = $scope.details.filter((values)=>values.isSeleted==true);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50855809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档