所以我有一个带有几个异步.then函数的控制器。最后,我用$ q.all()函数捕获它们以继续我的同步工作。现在我有一个带动态选项的选择:
<select ng-model="data.selectedUser" ng-change="changeList()" ng-options="user as user.firstname + ' ' + user.lastname for user in users">
<option value="">Select a user...</option>
</select>
使用ng-change我想在我的控制器中获取所选用户,因此我调用了changeList()。在changeList函数中,我做了一些不触发的简单警报。当我首先在控制器中进行测试警报时,它甚至会在选择选项时冻结。
在我的$ q.all()函数中:
$q.all(promises).then(function () {
users = UserService.getUsers();
$scope.users = users;
$scope.data.selectedUser = {};
$scope.changeList = function () {
var chosenUser = $scope.data.selectedUser;
alert(chosenUser.firstname);
alert('test');
};
}, function () {
alert('Failed');
});
警报什么都不做,我也尝试将changeList函数放在控制器底部的$ q.all函数之外。我做错了什么?
修改 用户已经定义,所有这些都有效。这纯粹是为什么ng-change不起作用。它也在不首先清空selectedUser范围的情况下进行测试。
答案 0 :(得分:1)
它看起来不像ng-change适用于选择。你可以看看这个js-fiddle:http://jsfiddle.net/fc984j9b/
我没有使用ng-change来触发事件,而是在select的ng-model上使用$ watch来触发函数,在你的情况下它将是:
$scope.$watch("data.selectedUser", function(){
$scope.changeList();
});
我希望帽子有帮助
最好的问候
奥利弗
答案 1 :(得分:0)
这是一个使用你的代码并且工作的JSFiddle:
http://jsfiddle.net/A_Sambres/2kwhw0dw/1/
那里必须与您的代码不同的是用户对象
users = [{"firstname":"Adrien","lastname":"Foo"}, ...{"firstname":"Thing2","lastname":"Foo"}];
,以及数据对象的初始化。
$scope.data = {selectedUser : {}};
所以我猜你可以检查这段代码与你的代码之间的差异,以发现出错的地方。 它可能是没有正确结构的用户对象,或者在控制器中未正确声明的$ scope.data。