我有一大堆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);
答案 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);