我有动态生成下拉列表的代码。我想用ng-repeat设置选定的值,为了做到这一点我在ng-model中使用函数但是我得到了
Error: [ngModel:nonassign] Expression 'item.blockName = getCurrentComboBoxValue(item.blockName.id, blockNameOptions)' is non-assignable. Element: <select class="form-control input-sm" ng-model="item.blockName = getCurrentComboBoxValue(item.blockName.id, blockNameOptions)" name="blockName" ng-options="choice.id as choice.value for choice in blockNameOptions">
HTML
<div ng-repeat="item in modulesData.blocks track by item.id">
<select class="form-control input-sm" ng-model="item.blockName = getCurrentComboBoxValue(item.blockName.id, blockNameOptions)" name="blockName"
ng-options="choice.id as choice.value for choice in blockNameOptions">
</select>
</div>
控制器
$scope.getCurrentComboBoxValue = function (id, availableData) {
var result = _.where(availableData, { 'id': id });
return result[0];
}
答案 0 :(得分:1)
getCurrentComboBoxValue(blockNameOptions)
在=
的左侧无效。 ngModel要求左侧的东西是可分配的。
答案 1 :(得分:0)
我认为你正在尝试做角度为你做的事情。如果你给角度一个&#34;名称&#34;要为其分配所选值的属性,将自动绑定该值。当它改变。在您的情况下,selectedValue将为choice.id
。此值可以是作用域上的现有内容,也可以将其分配给作用域。例如:
<div ng-repeat="item in modulesData.blocks track by item.id">
<select class="form-control input-sm" ng-model="selectedItem" name="blockName"
ng-options="choice.id as choice.value for choice in blockNameOptions">
</select>
<div>I selected {{selectedItem}}</div>
</div>
然后在你的Ctrl中你可以做
$scope.getCurrentComboBoxValue = function (id, availableData) {
console.log($scope.selectedItem);
}
如果您将默认$ scope.selectedBlock =,则会默认为您选择。