AngularJS在传递给控制器之前更改模型值

AngularJS在传递给控制器之前更改模型值,angularjs,controller,coffeescript,Angularjs,Controller,Coffeescript,在将模型值传递给控制器之前,我需要更改模型值。这是我的密码: <div class="col-sm-8" ng-controller="MeasureCtrl as mc"> <select class="form-control" ng-model="measure" required="" ng-options="m.name as m.name for m in mc.measures"> </select> &

在将模型值传递给控制器之前,我需要更改模型值。这是我的密码:

<div class="col-sm-8" ng-controller="MeasureCtrl as mc">
    <select class="form-control" ng-model="measure" required="" 
           ng-options="m.name as m.name for m in mc.measures">
    </select>

</div>

它的工作原理如下:

为了显示选择框的默认值(最后一个值),我需要给出

ng model=“measure”和ng options=“m.name作为m.name表示mc.measures中的m”

您知道若measure等于m.name,则它会在选择框中显示measure(kg)。 问题是,当我将数据传递给控制器时,它发送的是“kg”,而不是它的id(例如15)。 在那之后,我想到了另一个想法,以下是我的方法:

<div class="col-sm-8" ng-controller="MeasureCtrl as mc">
    <select class="form-control" ng-init="measureId = mc.getMeasureIdByName(measure)" ng-model="measure" required="" name="mc.getMeasureIdByName(measure)"
            ng-options="m.name as m.name for m in mc.measures">
    </select>
    <input type="hidden" ng-model="measureId" name="measureId"/>
    {{measureId}}
</div>

{{measureId}}

我有一个id,如何发送measureId而不是measure?

您需要在表达式中选择id:

ng-options="m.name as m.name for m in mc.measures"
变成:

ng-options="m.id as m.name for m in mc.measures"

从文档中,您需要使用

是的,如果我写的是m.id而不是m.name,它会发送到服务器的id。为什么我要写m.name,因为ng model=“measure”是measureName。您知道ng model值等于m.name selectbox显示默认值。