为什么不是我的角度选项跟踪id工作

时间:2016-02-12 10:54:54

标签: javascript angularjs

我确信我一定做错了,但是:

我有一个存储项目ID的对象。我也有一系列这些项目。我需要一个'select'来代表当前选中的项目,但也可以更改所选项目。

我已将'select的模型设置为object.selectId。 'select'ng-options是“option.Text for options in options track in optionId”

然而,模型和'选择'选项类型不匹配

我如何实现我的需要?

这是我正在做的事情的小提琴:https://jsfiddle.net/vb2xe1mc/5/

代码:

<script>
angular.module('myApp', [])
  .controller('myctrl', ['$scope', function($scope) {

    $scope.item = {
      id: 1
    };
    $scope.options = [
      {Text: "zero",  Id: 0}, 
      {Text: "one",   Id: 1}, 
      {Text: "two",   Id: 2}, 
      {Text: "three", Id: 3}
    ];

    $scope.selectChange = function() {
      alert($scope.item.id);
    };
  }]);
</script>
<div ng-app="myApp">
   <div ng-controller="myctrl">
       <select ng-model="item.id" ng-options="option.Text for option in options track by option.Id" ng-change='selectChange()'>
       </select>
   </div>
</div>

如果可以,请告诉我出错的地方或纠正小提琴。

谢谢^ _ ^ 安迪

澄清: 模型项已选择id 1。在这种情况下,我需要列表预先选择id为1的选项。此外,选择该选项时,它不会将item.id设置为int,而是将其设置为整个选项。我需要它将item.id设置为option.Id

3 个答案:

答案 0 :(得分:0)

将选择绑定到a2enmod headers ,而不是ng-model="item"

同时决定ng-model="item.id"id

Id

请点击此处查看固定版本:https://jsfiddle.net/ax3k418p/

答案 1 :(得分:0)

https://jsfiddle.net/vb2xe1mc/10/

您需要将item绑定到ng-model,并且初始$scope.Id应设置为1而不是$scope.id = 1

同时检查提醒时间应为alert($scope.item.Id);

<div ng-app="myApp">
  <div ng-controller="myctrl">
    <select ng-model="item" ng-options="option.Text for option in options" ng-change='selectChange()'>
    </select>
  </div>
</div>

JS:

angular.module('myApp', [])
  .controller('myctrl', ['$scope', function($scope) {

    $scope.item = {
      Id: 1
    };
    $scope.options = [{
      Text: "zero",
      Id: 0
    }, {
      Text: "one",
      Id: 1
    }, {
      Text: "two",
      Id: 2
    }, {
      Text: "three",
      Id: 3
    }, ];

    $scope.selectChange = function() {
      alert($scope.item.Id);
    };
  }]);

答案 2 :(得分:0)

<select ng-model="item.id" ng-options="option.id as option.Text for option in options" ng-change='selectChange()'>

您想要选择option.id,而不是option,并且track by是不必要的。