AngularJS下拉列表未显示选定值

Raj*_*oit 9 javascript arrays json angularjs ng-options

在角度下拉列表中显示选定值时遇到问题.当我给这样的时候它起作用

$scope.selectedItem = $scope.items[1];
Run Code Online (Sandbox Code Playgroud)

如果我直接给出那个价值,那就不行了

$scope.selectedItem = { name: 'two', age: 27 };
Run Code Online (Sandbox Code Playgroud)

HTML:

<html ng-app="app">
  <body>
    <div ng-controller="Test">
      <select ng-model="selectedItem" ng-options="item.name for item in items">
      </select>
    </div>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

JS:

var app = angular.module('app',[]);
app.controller('Test',function($scope){
   $scope.items = [{name: 'one', age: 30 },{ name: 'two', age: 27 },{ name: 'three', age: 50 }];
  $scope.selectedItem = $scope.items[1];
});
Run Code Online (Sandbox Code Playgroud)

CODEPEN: http ://codepen.io/anon/pen/zxXpmR

解:

谢谢samir-das.我根据你的建议修好了.

var choosen_value = { name: 'two', age: 27 };
angular.forEach($scope.items, function(item){
  if(angular.equals(choosen_value, item)){
    $scope.selectedItem = item;
  }
});
Run Code Online (Sandbox Code Playgroud)

Sam*_*mir 6

好吧,因为

$scope.items[1]并且{ name: 'two', age: 27 }是完全不同的事情.

{ name: 'two', age: 27 }是一个完全不同的对象,而是对象$scope.items[1]的一部分$scope.items

当您使用模板中的东西时{{}},将其添加到其观察者列表中.

因此,当角度将其放入观察列表时,它是一个{ name: 'two', age: 27 }不同于的对象(即)$scope.items.

selectedItem与您在控制器中设置的对象相关联.在同时总结脏检查,角意愿检查selectedItem针对 { name: 'two', age: 27 }不反对$scope.items

希望你明白我的意思

  • 您将不得不使用相同的对象.您可以先根据要启动的项目搜索项目,然后分配找到的项目 (2认同)

noj*_*noj 6

正如在其他答案中所解释的那样,虽然两个对象可能具有相同的属性和值,但它们是两个不同的对象,因此angular不认为它们是相等的.

但是,您可以使用ng-options中track by表达式来指定将决定相等性的属性:

ng-options="item.name for item in items track by item.name"

http://codepen.io/anon/pen/WbWMrp