【问题标题】:AngularJs : ng-model not binding to ng-checked for input type="radio", using with ng-repeat [duplicate]AngularJs:ng-model 未绑定到 ng-checked 输入类型 =“radio”,与 ng-repeat 一起使用 [重复]
【发布时间】:2019-02-09 14:14:32
【问题描述】:

我正在尝试使用带有表达式跟踪的 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 不应一起使用,理想情况下应使用模型绑定进行检查。
  2. explanation我读到,ng-repeat 无法正确渲染,所以我尝试强制重新渲染但没有成功。
  3. 从模板中删除 ng-checked 仍然无效。
  4. Track by 适用于 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>

自动?我上面的所有尝试都不起作用我错过了什么。

【问题讨论】:

  • 使用 angularjs 1.6 ,并尝试使用 1.7,如果它解决了我的问题,将会更新。
  • 有什么帮助吗??这不是我检查的版本的问题
  • @georgeawg ::感谢您的修改。你有什么建议让我试试吗?我不认为它是重复的。问题在于混合 ng-model 和 ng-checked。此外,现在您已将其更改为 sn-p 更多人可以过去并可能解决。早些时候它不在sn-p中,但由于您复制了现在没有人可以回答。
  • 我关闭了这个问题,因为它无法挽救。该问题已被编辑以删除 ng-checked。任何寻求“ng-model not binding to ng-checked”建议的人最好阅读副本。
  • @georgeawg:现在我知道我们不应该同时使用 ng-model 和 ng-checked 但在我尝试过的解决方案中,我已经将其删除并尝试了。无论如何谢谢你.....

标签: javascript angularjs html radio-button


【解决方案1】:

您有一些语法错误、缺少模型值和一些不必要的标记。首先,您可以完全摆脱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>

【讨论】:

  • 看起来在这里工作,我看到person: $scope.people[1] 可能是我的角度版本。渲染有问题吗?我正在使用 ngIf 模板根据条件加载。
  • 对不起,我需要更新代码 sn-p。我没有正确写下用例,你解释的方式是有效的,但我的用例/或看到我想要的不同。你现在可以看看它。谢谢
  • 现在请帮忙​​
猜你喜欢
  • 2013-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多