Angular - 无法使用 ng-submit 获取选定的 ng-repeated 单选按钮

Posted

技术标签:

【中文标题】Angular - 无法使用 ng-submit 获取选定的 ng-repeated 单选按钮【英文标题】:Angular - unable to get selected ng-repeated radio button using ng-submit 【发布时间】:2015-08-19 01:00:49 【问题描述】:

我可能在这里遗漏了一些非常简单的东西 - 但如果我使用 ng-repeat 创建一堆单选按钮 - 我无法使用 ng-submit 获得选定的单选按钮。

控制器只是将一系列选项附加到范围。

标记只是在表单中创建一堆带有 ng-repeat 的单选按钮。它使用 ng-submit 来捕获提交事件。点击下方的“Run code sn-p”查看问题。

 angular.module('myApp', [])
    .controller('myController', ['$scope', function($scope) 

      $scope.selectedoption = "";
      $scope.submitCalled = "";

      $scope.options=[];
      $scope.options[0]=id: "option1", name: "option 1"
      $scope.options[1]=id: "option2", name: "option 2"
      $scope.options[2]=id: "option3", name: "option 3"
      $scope.options[3]=id: "option4", name: "option 4"

      $scope.submitForm = function()        
        console.log($scope.selectedoption);              
        $scope.submitCalled = "submit called " + $scope.selectedoption;
      ;
    ]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="myApp">

<form ng-submit="submitForm()" ng-controller="myController">    
    <div ng-repeat="option in options">
      <input type="radio" name="option" ng-value="option.id" ng-model="selectedoption">
      <label for="radio">option.name</label>
    </div>     

    <h2>selectedoption</h2>
    <h2>submitCalled</h2>

    <input type="submit" id="submit" value="Submit" />  
</form>
</div>

【问题讨论】:

看看这个***.com/questions/16970248/… 好的,谢谢@DmitriAlgazin - 但 pankajparkar 有答案。 【参考方案1】:

ng-repeat div 应该使用ng-model="$parent.selectedoption"

原因

ng-repeat 每次都会创建一个新的子作用域,因为您在 ng-repeat 中声明新的ng-model 将被添加到 ng-repeat 作用域(子)中,这个子作用域是由 @ 在每次迭代时创建的987654329@。由于您要创建一个作用域变量到父作用域,所以您需要使用将指向父作用域的$parent 变量。

<div ng-repeat="option in options">
  <input type="radio" name="option" ng-value="option.id" ng-model="$parent.selectedoption">
  <label for="radio">option.name</label>
</div>

Demo Fiddle

更新

避免这种$parent 注释的其他好方法是使用对象注释,这将遵循scope prototypal inheritance。您只需在控制器中定义一个范围变量,例如 $scope.selected = option: '' ,然后在 html 上使用它时,您可以直接将其引用为 selected.option,而无需使用 $parent 作为父范围引用。

Demo Fiddle

【讨论】:

@Donal 是的,我正在更新我的答案 好的,谢谢 - 不幸的是我只能投票一次 - 但我相信其他人会。 好的,谢谢。我在这里更新了第二个小提琴:jsfiddle.net/4hkw8h43/5 @Donal 感谢第二把小提琴..我没有时间去做..快乐编码:)

以上是关于Angular - 无法使用 ng-submit 获取选定的 ng-repeated 单选按钮的主要内容,如果未能解决你的问题,请参考以下文章

协调 Angular.js 和 Bootstrap 表单验证样式

AngularJS 等待提交表单(ng-submit)

Angular.js:表单提交操作未调用

如何添加多个条件以形成 ng-submit 或 Textbox ng-enter

ng-submit 在 Laravel PHP 框架中不起作用

当浏览器预填充表单字段时,AngularJS“ng-submit”有问题吗?