错误:ngModel:不可分配的表达式

时间:2014-04-09 17:13:41

标签: javascript angularjs

我有动态生成下拉列表的代码。我想用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];
}

2 个答案:

答案 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 =,则会默认为您选择。