我试图在我的应用程序中解决绑定问题。 Stackoverflow上存在类似的问题,但它们并未完全描述我的场景。
我有一个使用转发器创建的无线电组。每个style
值都是对象,所以我使用ng-value
指令将它们绑定正确
<label ng-repeat="style in styles">
<input type="radio" ng-model="formData.style" ng-value="style">
{{style.name}}
</label>
我的控制器逻辑非常简单:
var first = {
name: "First Name",
value: "First Value"
};
var second = {
name: "Second Name",
value: "Second Value"
};
var third = {
name: "Third Name",
value: "Third Value"
};
$scope.styles = [first, second, third];
$scope.formData = {};
//this code works and my screen shows 'second' as selected option
$scope.formData.style = second;
//this code do not works and my screen do not show 'Second name' as selected
//$scope.formData.style = {
// name: "Second Name",
// value: "Second Value"
// };
此代码按预期工作。我设置了我的选择,表单显示了所选的选项。
但在我的特定示例中,我没有引用我的second
值,我需要从第三个控件获取此数据,因此我的更新代码将如下所示:
$scope.formData.style = {
name: "Second Name",
value: "Second Value"
};
这种行为不起作用 - 我在屏幕上看不到电台选择。
答案 0 :(得分:4)
这里的原因是因为您将单选按钮绑定到模型$scope.formData.style
上的确切属性,在第一个示例中将其设置为second
这是一个项目在$scope.styles
数组中。
将单选按钮绑定到新对象时:
$scope.formData.style = {
name: "Second Name",
value: "Second Value"
};
您没有将它绑定到$scope.styles
数组中的对象,$scope.formData.style
现在它是完全独立的对象。
如果要动态设置,必须在$scope.styles
内查找所需的项目。
$scope.formData.style = _.findWhere($scope.styles, { name: "Second Name"})
function getFromArray(array, value) {
for(var i = 0; i < array.length; i++) {
if (array[i].name.toLowerCase() == value.toLowerCase()) {
return array[i];
}
}
}
$scope.formData.style = getFromArray($scope.styles, "Second Name");
虽然我建议使用某种Id而不是魔术字符串。