AngularJS ng-options无法绑定

时间:2016-07-28 17:30:35

标签: javascript angularjs ng-options

我很难在视图中选择一个选择,以便在模型更改时进行更新。我正在使用ng-options,如下所示。

<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);


}]);

选择显示'John'并且永远不会更新以显示其他名称。添加$scope.$apply();无济于事。

3 个答案:

答案 0 :(得分:0)

你需要使用$ timeout,而不是setTimeout

答案 1 :(得分:0)

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

答案 2 :(得分: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}}