我有一个对象散列,这个散列的 ID 绑定到一个 RADIO BUTTON。当用户选择此单选时,我需要使用基于此模型属性的选项填充选择标签。很难解释,所以我创建了一个 Codepen 来展示我想要的内容: http ://codepen.io/rizidoro/pen/BeJjf
提前致谢!
我有一个对象散列,这个散列的 ID 绑定到一个 RADIO BUTTON。当用户选择此单选时,我需要使用基于此模型属性的选项填充选择标签。很难解释,所以我创建了一个 Codepen 来展示我想要的内容: http ://codepen.io/rizidoro/pen/BeJjf
提前致谢!
这是一个动态绑定到单个 SELECT 元素的codepen 演示,在选择更改时使用工作 ng-model 绑定:
HTML:
<div ng-controller="TestCtrl">
<ul>
<li ng-repeat="attr in data">
<input type="radio" name='data-attr' value='{{attr.id}}' ng-model="selected.id" />{{attr.name}}
</li>
</ul>
<select ng-model="selected.value" ng-options="item.name for item in selectedAttr.values "></select>
</div>
JS:
function TestCtrl($scope) {
$scope.selected = {};
$scope.data = [
{"id":"113000",
"name":"Size",
"values":
[{"id":"92029","name":"Size A"},
{"id":"92030","name":"Size B"}]
},
{"id":"113002",
"name":"Color",
"values":
[{"id":"94029","name":"Blue"},
{"id":"94030","name":"Black"}]
}
];
$scope.$watch('selected.id', function(id){
delete $scope.selected.value;
angular.forEach($scope.data, function(attr){
if(attr.id === id){
$scope.selectedAttr = attr;
}
});
});
}
我创建了一个小提琴,可以解决你的问题。http://jsfiddle.net/qY2Zz/。
将数据分离到服务中。
animateAppModule.service('data', function(){...})
将模型分配给选择框。
ng-model="$scope.selectedOption"
http://jsfiddle.net/wagedomain/afuz5/
我稍微改写了您的 HTML - 在 div 或 span 就足够的情况下不使用 ul / li 标签。使它更容易。
基本上,在 ng-repeat 中,您可以这样做:
<div ng-repeat="attr in data">
<input type='radio' name='data-attr' value='{{attr.id}}' />{{attr.name}}
<select ng-model="selected" ng-options="item.name for item in attr.values "></select>
</div>
正是 ng-options 使这项工作发挥了作用。我还添加了一个 $scope.selected 变量来模型绑定,但我没有在小提琴中做任何事情。根据需要使用。