ng-change无法使用异步控制器逻辑

时间:2016-05-25 12:50:03

标签: angularjs select ionic-framework controller angularjs-ng-change

所以我有一个带有几个异步.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范围的情况下进行测试。

2 个答案:

答案 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。