【问题标题】:angular js watch ng-repeat角度 js 观看 ng-repeat
【发布时间】:2015-07-05 22:32:48
【问题描述】:

我在ng-repeat 的视图中使用了一个数组。之后,我每 10 秒更新一次该数组,并在界面中更改我的值。我希望能够在更新一个值时调用函数$scope.alertFunction

例如我有一个值为0的字段,当数组更新时,该字段的值为1,在界面上我会看到1而不是0,那一刻我想要触发此功能alertFunction。谁能帮帮我?

【问题讨论】:

    标签: angularjs watch


    【解决方案1】:

    在您的控制器中,您可以像这样查看数组:

    $scope.$watch('myArray', function(){
        //something happenned
    }, true);
    

    【讨论】:

    • 应该仍然有效。粘贴有关如何更新数组的代码。
    【解决方案2】:

    所以我有一个数组

    $scope.items = [{field_first: 0, field_sec: 1},{field_first: 1, field_sec: 3},{field_first: 0, field_sec: 0}]

    10 秒后我就会有

    $scope.items = [{field_first: 0, field_sec: 1},{field_first: 1, field_sec: 3},{field_first: 1, field_sec: 0}]

    在这种情况下,它已更新 $scope.items[2]["field_first"] 而不是 0,它现在的值为 1。我想触发该字段的事件。

    【讨论】:

      【解决方案3】:

      这一切都应该在您的控制器中完成,所以不用担心 ng-repeat。

      监视非常有用,但它们也可能很昂贵,因为它们会在每个摘要中执行,每当您的范围内发生任何事情发生变化时。

      另外,如果你在整个数组上放置一个手表,那么它不会告诉你哪些元素发生了变化,只有 something 有。

      在这种情况下,更新数组的代码是您可以控制的,因此您不需要单独的手表,您应该能够在更新时检查更改。

      例如:

      function updateItems(newItems) {
          $scope.items.forEach(function(obj, i) {
              Object.keys(obj).forEach(function(f) {
                  var oldValue = obj[f];
                  var newValue = newItems[i][f];
                  if(newValue !== oldValue) {
                      $scope.alertFunction({
                          index: i,
                          field: f,
                          oldValue: oldValue,
                          newValue: newValue
                      });
                  }
              });
          });
          $scope.items = newItems; // assuming you don't mind the array ref changing
      }
      

      编辑以使用您的示例。

      【讨论】:

        猜你喜欢
        • 2016-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-24
        • 1970-01-01
        • 2015-04-02
        • 1970-01-01
        • 2023-03-23
        相关资源
        最近更新 更多