ng-change在promise.then中没有被称为我们的模型更新

时间:2014-04-10 16:06:55

标签: javascript angularjs promise

当我在promise.then中更新ng-model参数时,我在选择未调用时遇到ng-change问​​题。我的选择是:

<select ng-model="currentReport"
    ng-options="rpt.ReportDisp for rpt in availableReports" 
    ng-change="updateDependent()"></select>

availableReports是这些对象的数组,由我的服务中的$ http调用检索。当呼叫结束时,我想确保选择第一个条目并执行代码:

webServices.getReports(user, menu1, menu2)
            .then(function (result) {
                $scope.availableReports = result.data.d;
                $scope.currentReport = $scope.availableReports[0];
             }

这会将select设置为1st报告,但ng-change不会调用函数updateDependent()。

另外,我尝试在.then中添加对updateDependent()函数的调用,如下所示。但是当函数被调用时,$ scope.currentReport是未定义的。

webServices.getReports(user, menu1, menu2)
            .then(function (result) {
                $scope.availableReports = result.data.d;
                $scope.currentReport = $scope.availableReports[0];
                updateDependent();
             }

任何人都知道发生了什么事?

发现问题,我

函数更新updateDependent声明为$ scope.updateDependent()。所以我需要将http关联.then中的引用更改为$ scope.updateDependent()。

1 个答案:

答案 0 :(得分:0)

我不确定从控制器更新时触发ng-change的规则,但是关于你的其他问题。

我会修改updateDependent以接受如下参数:

<select ng-model="currentReport"
    ng-options="rpt.ReportDisp for rpt in availableReports" 
    ng-change="updateDependent(currentReport)"></select>

并在你的后端

webServices.getReports(user, menu1, menu2)
        .then(function (result) {
            $scope.availableReports = result.data.d;
            $scope.currentReport = $scope.availableReports[0];
            updateDependent($scope.currentReport);
         }

我发现通过传入参数以提高可读性,更明确地了解函数的功能。此外,它简化了updateDependent的测试故事。