一旦用户在角度模板中更新了值,是否有一种方法值不会按间隔更新?

时间:2016-02-29 22:26:31

标签: angularjs controller

我有一大堆html,它会定期从控制器更新。这是html:

<tr ng-repeat="product in products">
    <td>{{product.name}}</td>
    <td>{{product.price}}</td>
    <td>{{product.description}}</td>
    <td>{{product.quantity}}</td>
    <td><input  value="{{product.price}}"/></td>
</tr>

如果用户更改了值,我不希望按旧时间间隔更新旧数据。有没有办法让它第一次更新product.price

以下是相关的控制器代码:

$interval(function(){
     DappStore.getProducts()
         .then(function(data){
           $scope.$apply(function(){
            $scope.products = data;
         });
     },1000);
},1000);

3 个答案:

答案 0 :(得分:0)

一次性绑定是关键字。

  

一次性表达式会在稳定后停止重新计算,   如果表达式结果为a,则在第一次摘要后发生   非未定义的值。

您所要做的就是改变您的代码:

<tr ng-repeat="product in ::products"> <!--HERE ARE THE CHANGE "::"-->
    <td>{{product.name}}</td>
    <td>{{product.price}}</td>
    <td>{{product.description}}</td>
    <td>{{product.quantity}}</td>
    <td><input  value="{{product.price}}"/></td>
</tr>

答案 1 :(得分:0)

如果我理解正确,您希望使用单向数据绑定而不是双向数据绑定。

只需使用{{::product.name}}代替{{name}}

欲了解更多信息: http://blog.thoughtram.io/angularjs/2014/10/14/exploring-angular-1.3-one-time-bindings.html

答案 2 :(得分:0)

在控制器轮询间隔中,只创建较新的值,但不会触及页面中的任何内容。

$interval(function(){
  DappStore.getProducts()
    .then(function(data){
      $scope.$apply(function(){
        var products_length;
        if(typeof $scope.products == 'undefined'){
          products_length = 0;
          $scope.products = [];
        } else {
          products_length = $scope.products.length;
        }

        for(var i = products_length; i < data.length; i++){
          $scope.products[i] = data[i];
        }
      });
    });
},1000);