javascript - AngularJs:ng-model 没有绑定到 ng-checked for input type="radio",与 ng-repeat 一起使用
问题描述
我正在尝试使用 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"}
}
尝试过的解决方案
- ng-checked expression ,虽然我读到 ng-model 和 ng-checked 不应该一起使用,理想情况下使用模型绑定它应该被 chcked。
- 解释我读到的,ng-repeat 没有正确渲染,所以我尝试强制重新渲染,但没有奏效。
- 从模板中删除 ng-checked 仍然无效。
- 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>
自动地 ?我上面的所有尝试都不起作用我错过了什么。
解决方案
您有一些语法错误、缺少模型值和一些不必要的标记。首先,你可以完全摆脱ng-checked
。如果您设置正确,ng-model
这将自动处理。ng-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>
推荐阅读
- asp.net - 在谷歌饼图图例上显示值
- c++ - 删除向量的元素并在c ++中保留空白空间
- javascript - HTML 视频未填充父 div
- javascript - 正则表达式检测 <> 内的文本
- django - 如何从 Django 视图将变量传递给 SCSS
- c# - 具有 autogeneratecolumns 的 DataGrid 中的列名显示错误
- java - 更正 Info.plist 设置以在特定 JVM 中启动 Java 应用程序
- c# - 如何使用 XmlDocument 解析带有命名空间的 XML
- python - 在噪声图像上查找对象的位置
- java - 如何在 Netbeans 的类中移动成员