AngularJs:ng-model不绑定到ng-checked for input type =“radio”,使用ng-repeat [duplicate]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我正在尝试使用ng-repeat指令和逐个表达式来显示单选按钮,当我提交值附加到模型中时,当我使用模型中的值重新打开页面时,单选按钮不显示已选中。

我用平面字符串模型+字符串值实现了相同的功能。但这次我正在尝试使用物体。

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
<div ng-app="app" ng-controller="MyCtrl">
    <form name="myForm">
        <p>New TRY</p>
        <ul>
            <li ng-repeat="i in peopleNew.person">
                <label>
            {{i}}
                    <input type="radio" ng-model="peopleServer.person"
                           name="same" ng-value="i" />
                </label>  
            </li>
        </ul>
    </form>
<div>

JS代码

 angular.module('app', [])
  .controller('MyCtrl', ($scope) => {
  $scope.peopleNew ={
   person: {
      "name": "Ringo",
      "id": "R",
     "subj": "Sci"
    } 
  }
   $scope.peopleServer= {
   person: {"name":"Ringo"}
   }
  });

如上所述,我应该在屏幕上有4个单选按钮,我可以选择1并提交。然后,当我再次在我的模型中打开它时,该人具有正确的值,通过ng-value保存但仍然在UI上我没有看到单选按钮检查名称Ringo应该被检查。型号有:

 $scope.peopleServer= {
    person: {name:"Ringo"}
   }

试过的解决方案

  1. ng-checked表达式,虽然我读过ng-model和ng-checked不应该一起使用,理想情况下使用模型绑定它应该被chcked。
  2. explanationI读到,ng-repeat没有正确渲染所以我试图重新渲染但没有工作。
  3. 从模板中删除ng-checked仍然无法正常工作。
  4. 在ng-repeat中按字符串值工作跟踪。在ng-options中它也适用于对象值,但是它不是输入元素而是选择元素

当您重新加载或者您已经拥有模型中的值时,有人会帮助您了解如何选择单选按钮

	angular.module('app', [])
  .controller('MyCtrl', ($scope) => {
  $scope.peopleNew ={
   person: {
      "name": "Ringo",
      "id": "R",
     "subj": "Sci"
    } 
  }
  //uncomment for testing. 
   $scope.peopleServer= {
   person: {"name":"Ringo"}
   }
  });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
<div ng-app="app" ng-controller="MyCtrl">
	<form name="myForm">
		<p>New TRY</p>
		<ul>
			<li ng-repeat="i in peopleNew.person">
				<label>
            {{i}}
                    <input type="radio" ng-model="peopleServer.person"
                           name="same" ng-value="i" />
				</label>  
			</li>
		</ul>
    </form>
<div>

自动?我上面的所有尝试都没有用,我错过了什么。

javascript angularjs html5 radio-button
1个回答
0
投票

您有一些语法错误,缺少模型值和一些不必要的标记。首先,你可以完全摆脱ng-checked。如果正确设置ng-modelng-value,将自动处理。由于您的对象是独特的,因此不需要track by

使用AngularJS指令(例如ng-value)时,您不需要使用大括号来引用模型值。所以ng-value="{{person}}"成为ng-value="person"

你指的是myObj.person,但似乎没有相应的模型值。下面是您提供的代码和标记的编辑,显示它确实可以使用对象作为单选按钮的值。

angular.module('app', [])
  .controller('MyCtrl', ($scope) => {
    $scope.people = [{
      name: "John",
      id: "J"
    }, {
      name: "Paul",
      id: "P"
    }, {
      name: "George",
      id: "G"
    }, {
      name: "Ringo",
      id: "R"
    }];
    $scope.myObj = {
      person: $scope.people[1]
    };
  });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.2/angular.min.js"></script>
<div ng-app="app" ng-controller="MyCtrl">
  <form name="myForm">
    <p>Decisions</p>
    <ul>
      <li ng-repeat="person in people">
        <label>
            {{ person.name }}
            <input type="radio" ng-model="myObj.person"
                   name="sameName" ng-value="person" />
        </label>
      </li>
    </ul>
  </form>
  <div>
    {{ myObj.person }}
  </div>
</div>
© www.soinside.com 2019 - 2024. All rights reserved.