ng-change 不适用于异步控制器逻辑
ng-change not working with asynchronous controller logic
所以我有一个带有几个异步 .then 函数的控制器。最后,我用 $q.all() 函数捕获了它们,以继续我的同步工作。现在我有一个带有动态选项的 select:
<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 在我的控制器中获取 selected 用户,所以我调用了 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 范围的情况下进行了测试。
看起来 ng-change 在 select 上不起作用。你可以看看这个 js-fiddle: http://jsfiddle.net/fc984j9b/
我没有使用 ng-change 来触发事件,而是在 select 的 ng-model 上使用 $watch 来触发一个函数,在你的情况下它将是:
$scope.$watch("data.selectedUser", function(){
$scope.changeList();
});
希望帽子能帮到你
此致
奥利弗
这是一个使用您的代码并且确实有效的 JSFiddle:
http://jsfiddle.net/A_Sambres/2kwhw0dw/1/
必须与您的代码不同的是用户对象
users = [{"firstname":"Adrien","lastname":"Foo"}, ...{"firstname":"Thing2","lastname":"Foo"}];
,以及数据对象的初始化。
$scope.data = {selectedUser : {}};
所以我想您可以检查此代码与您的代码之间的差异,以找出问题所在。
可能是用户对象的结构不正确,或者 $scope.data 在控制器中没有正确声明。
所以我有一个带有几个异步 .then 函数的控制器。最后,我用 $q.all() 函数捕获了它们,以继续我的同步工作。现在我有一个带有动态选项的 select:
<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 在我的控制器中获取 selected 用户,所以我调用了 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 范围的情况下进行了测试。
看起来 ng-change 在 select 上不起作用。你可以看看这个 js-fiddle: http://jsfiddle.net/fc984j9b/
我没有使用 ng-change 来触发事件,而是在 select 的 ng-model 上使用 $watch 来触发一个函数,在你的情况下它将是:
$scope.$watch("data.selectedUser", function(){
$scope.changeList();
});
希望帽子能帮到你
此致
奥利弗
这是一个使用您的代码并且确实有效的 JSFiddle:
http://jsfiddle.net/A_Sambres/2kwhw0dw/1/
必须与您的代码不同的是用户对象
users = [{"firstname":"Adrien","lastname":"Foo"}, ...{"firstname":"Thing2","lastname":"Foo"}];
,以及数据对象的初始化。
$scope.data = {selectedUser : {}};
所以我想您可以检查此代码与您的代码之间的差异,以找出问题所在。 可能是用户对象的结构不正确,或者 $scope.data 在控制器中没有正确声明。