使用ng-options在AngularJS中使用JSON填充select

时间:2014-06-13 19:07:56

标签: javascript json angularjs

编辑:我的代码确实有效,我只是一个无关紧要问题的白痴。感谢大家的投入。

所以我有一个JSON对象数组,格式如下:

[{"id":"id1", "text":"text1"}, {"id":"id2", "text":"text2"},....]

我想使用这些填充AngularJS选择字段,文本字段作为显示文本,id字段作为值,或者与模型绑定的任何内容。我环顾四周,但不能为我的生活找出我需要做的事情。

现在我的选择已经有了这个,导致什么都没有显示:

<select name="field" ng-model="npe.formData.field" ng-options="field.id as field.text for field in fields">

以这种方式执行ng-options会导致事物显示,但显然会导致错误的值绑定到模型:

ng-options="field as field.text for field in fields"

我看到有人在谈论使用“(键,价值)”,但我无法理解其运作方式。

2 个答案:

答案 0 :(得分:9)

你需要(键,值)以防你重复地图,事实并非如此 - 在你的例子中,你正在迭代一个对象数组。 (key,value)的用法是:

$scope.map={item1:'a',item2:'b'};
...
<li ng-repeat="(id,text) in map">{{id}}) {{text}}</li>

将“item1”呈现为“依旧”等等。

为什么你提到下面的代码片段不起作用?

ng-options="field.id as field.text for field in fields"

查看这个小提琴 - http://jsfiddle.net/7eqsc/2/,它就像一个魅力,并使用正确的ID更新模型。

<div ng-app="myApp">
<div ng-controller="myCtrl">

    <div ng-repeat="(id,text) in notes">{{text}}</div>
    <select ng-model="model.id" ng-options="note.id as note.text for note in notes" ></select>

    Selected id:{{model.id}}

</div>

答案 1 :(得分:3)

这是一个示例Fiddle,它与基本控制器分配一些值一起使用。虽然您没有完整的代码示例,但我希望您不会使用ng-model这个问题。

function TodoCtrl($scope) {
    $scope.fields = [{"id":"id1", "text":"text1"}, {"id":"id2", "text":"text2"}];
    $scope.choice = null;
}

和HTML

<div ng-app>
  <div ng-controller="TodoCtrl">
      <h2>Chosen = {{ choice }}</h2>
      <select ng-options="field.id as field.text for field in fields" ng-model="choice"></select>
  </div>
</div>

您应该从中做到的是,ng-options 需要 ng-model才能正常工作,否则它将无所作为。