使用Angularjs在选择下拉列表中设置默认值

run*_*ero 21 angularjs

我有一个对象如下.我必须将其显示为下拉列表:

var list = [{id:4,name:"abc"},{id:600,name:"def"},{id:200,name:"xyz"}]
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我有一个带有值的变量.此值决定默认情况下在下拉列表中选择数组中上述三项中的哪一项:

 $scope.object.setDefault = 600;
Run Code Online (Sandbox Code Playgroud)

当我创建一个下拉表单项时,如下所示:

<select ng-model="object.setDefault" ng-options="r.name for r in list">                 
Run Code Online (Sandbox Code Playgroud)

我面临两个问题:

  1. 该列表生成为

    <option value="0">abc</option>
    <option value="1">def</option>
    <option value="2">xyz</option>
    
    Run Code Online (Sandbox Code Playgroud)

    代替

    <option value="4">abc</option>
    <option value="600">def</option>
    <option value="200">xyz</option>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 默认情况下,没有选项被选中,即使我有 ng-model="object.setDefault"

Ste*_*nie 21

问题1:

您获得的生成的HTML是正常的.显然,Angular的一个特性是能够使用任何类型的对象作为选择的值.Angular执行HTML选项值与ng-model中的值之间的映射.另请参阅Umur在此问题中的评论:如何在AngularJS的ng-options中设置value属性?

问题2:

确保您使用以下ng选项:

<select ng-model="object.item" ng-options="item.id as item.name for item in list" />
Run Code Online (Sandbox Code Playgroud)

并将其放入您的控制器中以选择默认值:

object.item = 4
Run Code Online (Sandbox Code Playgroud)


Sha*_*dio 10

使用ng-options填充选择列表时,它使用整个对象作为选定值,而不仅仅是您在选择列表中看到的单个值.所以在你的情况下,你需要设置

$scope.object.setDefault = {
    id:600,
    name:"def"
};
Run Code Online (Sandbox Code Playgroud)

要么

$scope.object.setDefault = $scope.selectItems[1];
Run Code Online (Sandbox Code Playgroud)

我还建议您只在模板中输出$ scope.object.setDefault的值,看看我在谈论选择的内容.

<pre>{{object.setDefault}}</pre>
Run Code Online (Sandbox Code Playgroud)

  • 只有第二个才有用.select使用===来比较值.如果您设置具有相同属性的另一个对象,则会将其视为不同. (3认同)

小智 8

在视图中

<select ng-model="boxmodel"><option ng-repeat="lst in list" value="{{lst.id}}">{{lst.name}}</option></select>
Run Code Online (Sandbox Code Playgroud)

JS:

在侧控制器中

 $scope.boxModel = 600;
Run Code Online (Sandbox Code Playgroud)


小智 7

您可以使用以下代码(跟踪),

<select ng-model="modelName" ng-options="data.name for data in list track by data.id" ></select>
Run Code Online (Sandbox Code Playgroud)