2016-07-28 115 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}}