2016-07-28 84 views
1

我正努力在模型更改时在视图中获取选择。我按如下方式使用ng-optionsAngularJS ng-options not binding

<select ng-options="item as item.empName for item in employees track by item.ID" ng-model="emp.selected"> 

要显示这里的问题是我可以构建最简单的情况。

app.controller('Ctrl', ['$scope', function($scope) { 

$scope.employees = [ 
    { 
    "empName": "John", 
    "ID": 1 
    }, 
]; 

setTimeout(function(){ 
    $scope.employees = [ 
     { 
     "empName": "John", 
     "ID": 1 
     }, 
     { 
     "empName": "Sam", 
     "ID": 1 
     }, 
     { 
     "empName": "Frank", 
     "ID": 1 
     }]; 
    }, 100); 


}]); 

该选择显示'约翰',从不更新显示其他名称。添加$scope.$apply();没有帮助。

+0

,则不应使用'setTimeout'有棱有角,这是不是与角'$ digest'循环兼容。如果您*必须*使用超时,请改用'$ timeout'。但是,鉴于您创建此示例以显示问题,我怀疑问题是其他问题。 – Claies

+0

值得注意的是'$ scope。$ apply()'在这里确实有效,假设你将它添加到代码中的正确位置。 http://plnkr.co/edit/HB3cA6StEicr391jLnXq。这不是推荐的解决方案,但是...... – Claies

+0

您可以使用setTimeout,但它不是角度推荐的方法。我运行你的代码,它为我工作。你看到日志中有错误吗? – Naveen

回答

0

你需要使用$超时,不setTimeout的

+0

恐怕没有帮助!它仍然不会更新。 –

0

的问题可能是ngModal如果我没有错。只需更改ngModel值并检查

0

以下是我重新编写代码的方式。您可以在该型号上做手表并进行相应更新。请记住更新ID,因为您使用ID跟踪它们。

angular.module('myApp', []).controller('InputCtrl', ['$scope', '$timeout',function($scope, $timeout) { 
     $scope.employees = [{ 
      "empName": "John", 
      "ID": 1 
     }, ]; 
// watch on employees model, so that you get updated value. 
     $scope.$watch("employees", function(newv, old, scope) { 
      $scope.employees = newv; 
      console.log(newv) 
     }, true); 

     $timeout(function() { 
      $scope.employees = [{ 
       "empName": "John", 
       "ID": 1 
      }, { 
       "empName": "Sam", 
       "ID": 2 
      }, { 
       "empName": "Frank", 
       "ID": 3 
      }]; 
     }, 100); 


    }]); 

在HTML过验证添加Name :{{emp.selected.empName}}