试图理解角度范围
trying to understand angular scope
本文关键字:范围 更新时间:2023-09-26
我写了一个代码笔来更好地解释我对角度范围的困惑。
从下面的脚本中,我有一个20000的起始余额,我想在记录了新交易后显示余额的变化,然而,我得到了这个奇怪的结果,我无法解释。有人能帮忙吗?我做错了什么?
提前感谢!
var transactionApp = angular.module('transactionApp', []);
transactionApp.controller("transactionCtrl", ['$scope',
function($scope) {
$scope.transactions = [100, -200, 500, 10000, -2000];
$scope.balance = 20000;
$scope.updateBalance = function(balance, transaction) {
$scope.balance += transaction;
return $scope.balance;
}
}
])
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="transactionApp">
<div ng-controller="transactionCtrl">
Current Balance: {{balance}}
<br/>Transaction history:
<ul>
<li ng-repeat="transaction in transactions">
Transaction:{{transaction}}
<br/>Balance: {{updateBalance(balance, transaction)}}
</li>
</ul>
</div>
</div>
基本上是@Treeless提到的一个例子。plnkr
$scope.clickBalance = function(transaction) {
return $scope.balance += transaction;
};
问题是由于视图中的函数updateBalance引起的。它被调用,Angular运行其摘要循环。摘要循环会在"{{}}"中的任何变量/函数更改值时执行并更新/运行这些变量/函数。在这种情况下,由于平衡变量的变化,它会多次运行updateBalance函数。
要解决当前的问题。我会把更新余额移到一个按钮上。单击按钮后,运行updateBalance功能。或者将更新余额完全从视图中删除,并在控制器中使用它,迭代事务并手动从余额中减去值。
希望能有所帮助。:)
关于摘要周期还有另一个问题:什么时候调用$digest周期?
更新(根据要求修复逻辑):
var transactionApp = angular.module('transactionApp', []);
transactionApp.controller("transactionCtrl", ['$scope',
function($scope) {
$scope.transactions = [100, -200, 500, 10000, -2000];
$scope.balance = 20000;
$scope.getBalanceAfterTransaction = function(transaction){
$scope.balance += transaction
return $scope.balance;
}
}
])
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="transactionApp">
<div ng-controller="transactionCtrl">
Current Balance: {{balance}}
<br/>Transaction history:
<ul>
<li ng-repeat="transaction in transactions">
Transaction:{{transaction}}
<br/>Balance: {{getBalanceAfterTransaction(transaction)}}
</li>
</ul>
</div>
</div>
如果您需要进一步澄清,请告诉我:)
相关文章:
- 正在全局范围中查找JavaScript函数
- 如何通过数组更新角度子范围
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- HTML范围:动态设置值属性
- "实例范围”;TypeScript类的getter/setter
- jquery日期选择器年份范围默认值
- Jpgraph:如何手动设置X轴和Y轴的范围
- 在对象数组中查找多个值的d3范围
- 动态加载angularjs并生成控制器和范围
- 如何通过谷歌应用程序脚本从谷歌文档中的位置确定命名范围
- 在Materialize Calendar中设置年份范围
- 在MVVM视图模型中处理应用程序范围的元素
- setInterval游戏循环的范围问题
- AngularJS获取范围中的选定项目
- 从指定范围创建字符数组
- ES6是否引入了一种机制来生成块范围的函数语句(而不是表达式)
- Angularjs无法将单选按钮与嵌套范围内的模型绑定
- ngDialog-弹出窗口未更新范围变量
- 如何使用D3生成特定范围内的随机颜色
- 如何将输入范围的值传递给JS中的变量