【问题标题】:select box with ngModel is not populating the selected value带有 ngModel 的选择框未填充所选值
【发布时间】:2016-02-23 08:51:45
【问题描述】:

我有一个 JSON 响应数据,它是一个代表国家代码和描述的数组

 {"codeDescList":[{"desc":"Aruba"}],"codeValueCode":"ABW"},
 {"codeDescList":[{"desc":"Afghanistan"}],"codeValueCode":"AFG"},     
 {"codeDescList":[{"desc":"Angola"}],"codeValueCode":"AGO"},
 {"codeDescList":[{"desc":"Anguilla"}],"codeValueCode":"AIA"},
 {"codeDescList":[{"desc":"Åland Islands"}],"codeValueCode":"ALA"},  
 {"codeDescList":[{"desc":"Albania"}],"codeValueCode":"ALB"}

我将上述数组存储在 angularJS 范围对象中,如下所示

  $scope.codeValueData = response.data;

我为国家/地区创建了选择框

 <div class="form-group">
      <select ng-model="profileBizObj.preferredAddress.countryCode" ng-options="codeValue.codeDescList[0].desc for codeValue in codeValueData track by codeValue.codeValueCode">
    </select>
 </div>

选择框已正确创建,如下所示

<option value="ABW">Aruba</option>
<option value="AFG">Afghanistan</option>
<option value="AGO">Angola</option>
<option value="AIA">Anguilla</option>
<option value="ALA">Åland Islands</option>
<option value="ALB">Albania</option>

我的代码的问题是,如果 profileBizObj.preferredAddress.countryCode 指的是值“AGO”,则选择框未显示国家“安哥拉”。选择框显示为空白。

我是 angularJS 的新手。请帮助解决此问题。谢谢

【问题讨论】:

  • 你能为此制作一个小提琴吗?
  • 不确定你在问什么。您是说您的选择列表已填充,但是一旦您单击它,该选项就会消失?
  • 告诉我何时何地分配 profileBizObj.preferredAddress.countryCode 的值?首先查看代码一切是否正确可能是 profileBizObj.preferredAddress.countryCode 中的问题。
  • 我的选择框正在填充国家,但未选择/显示选择框中的值作为 ng-model 的值。谢谢

标签: angularjs


【解决方案1】:

使用ng-repeat 可以更轻松地实现您尝试做的事情。试试这个:

<select ng-model="profileBizObj.preferredAddress.countryCode">
      <option ng-repeat="item in codeValueData" value="{{item.codeValueCode}}">
           {{item.codeDescList[0].desc}}
      </option>
</select>

这是一个有效的小提琴:http://jsfiddle.net/5s0b0jnz/

【讨论】:

    【解决方案2】:

    在下面的选择语句对我有用

     <select ng-model="profileBizObj.preferredAddress.countryCode" ng-options="codeValue.codeValueCode as codeValue.codeDescList[0].desc for codeValue in codeValueData">
    

    选择框填充为

    <option value="0">Aruba</option>
    <option value="1">Afghanistan</option>
    <option value="2">Angola</option>
    <option value="3">Anguilla</option>
    <option value="4">Åland Islands</option>
    <option value="5">Albania</option>
    

    并且 Selectiong Angola 将作为“AGO”存储在模型“profileBizObj.preferredAddress.countryCode”中,这正是我需要的。

    谢谢大家的帮助

    【讨论】:

      【解决方案3】:

      你的 ng-options 是 ng-options="codeValue.codeDescList[0].desc for codeValue in codeValueData track by codeValue.codeValueCode"&gt;,这意味着,使用 codeValue 将绑定到模型,并且 ...desc 作为显示值。所以当你的模型值为AGO时,不能引用codeValueData中的某个对象。

      你应该像AGO这样设置你的选项值:

      ng-options="codeValue.codeValueCode as codeValue.codeDescList[0].desc for codeValue in codeValueData track by codeValue.codeValueCode">
      

      然后codeValueCode 将应用于您的模型。反之,对于AGO这样的模型值,将选择相关选项。

      【讨论】:

      • 就个人而言,我在下面回答之前尝试过。我得到了Error: Syntax Error: Token 'track' is an unexpected token at column 15 of the expression [codeValueData track by codeValue.codeValueCode] starting at [track by codeValue.codeValueCode].
      • 只删除track by,不应将'track by'与'as'一起使用
      • 这不是文档所说的:docs.angularjs.org/api/ng/directive/ngOptions。我认为您的答案在理论上是正确的,但无论出于何种原因,它在实践中都行不通。
      • 在那个文档中,据说track by是通过track by expression来跟踪物品的身份。不用于将模型值设置为track by expression 。正如我所说,在您之前的代码中,模型是代码对象,而不是代码值(通过表达式跟踪)。如果你想设置模型,你应该使用select .. as ..
      • 如果你使用item.code as item.label for item in items track by item.id ,在我的理解中,item.id的track会评估模型的id(定义为as),然后它会尝试找到@987654338 @。您可以阅读该文档中select as and track by 部分的部分内容。
      猜你喜欢
      • 2013-08-03
      • 2014-11-08
      • 2023-04-08
      • 2017-05-01
      • 2023-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多