【问题标题】:ng-repeat declared variable not getting updated in controllerng-repeat 声明的变量未在控制器中更新
【发布时间】:2015-06-22 02:05:25
【问题描述】:

我已经在我的控制器中声明了一个 $scope 变量:

$scope.filteredPayments = [];

我的 HTML 中有一个 ng-repeat,它运行以下内容:

ng-repeat="payment in filteredPayments = payments"

payments 是从 Parse 异步填充的。它可以正常工作并相应地填充我的表格。

以下手表也不会触发:

$scope.$watch('filteredPayments', function(newValues) {
    console.log(newValues);
}

为什么filteredPayments 没有在我的控制器中更新,尤其是当我没有定义过滤器时,它会显示我在后端的所有付款?

【问题讨论】:

  • 你能澄清一下你的意思吗?我所看到的是您已经设置并清空范围变量并重复运行它。您将项目放在该变量中的哪个位置以进行重复?这里应该发生什么?
  • @ajmajmajma 我改进了描述并使代码更加简单。
  • filteredPayments = 重复付款的目的是什么?
  • 我有一个关于过滤付款的手表,可以在更新时运行一些代码。我已经用那个手表代码更新了描述。手表本身没有启动。

标签: angularjs angularjs-scope angularjs-ng-repeat angularjs-filter


【解决方案1】:

您似乎正在尝试绑定付款以过滤 ng-repeat 中的付款,例如

filteredPayments = payments

您应该做的是更新 $scope.filteredPayments,因为这是重复运行的内容。所以也许你的解析(或你喜欢的任何东西)中的一个 $q 承诺,然后设置。类似这样的东西(我也不知道你是如何取回数据的。

 //retrieve new data

 .then(function(newData){

  $scope.filteredPayments = newData;
  });

或者可能是一些简单的事情,只要您确定支付变量的更新如下:

$scope.filteredPayments = payments;   

【讨论】:

  • 我有这个 ng-repeat: ng-repeat="payment in filteredPayments = (payments | filter:equivalencyFilter | filter:search.value)" 我想让 filtersPayments 保存已过滤的付款并然后在该数据上运行一些代码。这就是我设置filteredPayments 和$watch 的原因。我不明白为什么它没有触发。
  • 正如我之前所说的 - 过滤器和一切工作正常。过滤数据后,我的表格已正确更新。出于某种原因,我无法在控制器中使用 $scope.filteredPayments 访问过滤后的数据。我的 $watch 没有触发。
  • @Niraj 因为您只在重复范围内绑定它,所以您应该让 Angular 发挥它的魔力,并使用我上面列出的方法。手表本身不会触发,因为filteredPayments 在那个范围内实际上并没有改变。您正在使用 filterPayments = 付款的“hack”
  • 有没有办法将filteredPayments分配给父范围变量?
  • @Niraj 我不想深入研究,你正在绕过 Angular 的设置方式。您应该尝试将您的重复设置为“filteredPayments 中的付款”,并在控制器中分配您需要过滤的任何内容,因为它与重复绑定。您不必将额外的手表添加到您用作 ng-repeat 项目的范围变量中,因为 Angular 已经为您做到了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多