我很难在视图中选择一个选择,以便在模型更改时进行更新。我正在使用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();
无济于事。
答案 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}}