Angularjs:即使在我将变量解析为整数之后,也会添加整数
Angularjs: addition of integers even after I parse the variable as integer
我在添加两个数字时确实遇到了一个奇怪的问题。
这是我的代码,在第一个控制器中一切正常,但是在第二个控制器中,如果我添加 0 而不是 10,输出完全奇怪
这是 html 代码
<div ng-app="">
<div ng-controller="Controller1">
<br/>**** Controller-1
<br/>Add 0 : {{update1(0)}}
<br/>Add 10 : {{update1(10)}}
<br/>Add 50 : {{update1(50)}}
<br/>Add -60 : {{update1(-60)}}</div>
<div ng-controller="Controller2">
<br/>**** Controller-2
<br/>Add 10 : {{update2(10)}}
<br/>Add 10 : {{update2(10)}}
<br/>Add 50 : {{update2(50)}}
<br/>Add -60 : {{update2(-60)}}</div>
</div>
这是我的JavaScript
function Controller1($scope) {
var x = 0;
$scope.update1 = function (smValue) {
x += parseInt(smValue);
return x;
}
}
function Controller2($scope) {
var y = 0;
$scope.update2 = function (smValue) {
y += parseInt(smValue);
return y;
}
}
这是输出
**** Controller-1
Add 0 : 0
Add 10 : 10
Add 50 : 60
Add -60 : 0
**** Controller-2
Add 0 : 110
Add 10 : 120
Add 50 : 170
Add -60 : 110
这是尝试的链接:http://jsfiddle.net/6VqqN/
谁能解释一下为什么它表现得那样。即使我添加一个 3 或 4 位数字,输出也与我预期的完全不同。
我会用一个稍微不同的例子来回答。
这个工作正常
1) http://jsfiddle.net/QThdE/1/
这个和你的问题一样:
2) http://jsfiddle.net/SE5a3/1/
两个示例都使用相同的控制器:
function MyController($scope){
var x=parseInt(00);
$scope.updateX = function(smValue){
x += parseInt(smValue);
}
$scope.printX = function() {
return x;
}
}
神奇之处在于两个函数都依赖于 x,并且两个函数都等待此变量的变化。
1)所以在第一种情况下:
<div ng-app="" ng-controller="MyController" ng-init="updateX(5)">
{{printX(0)}}
<br/><a ng-click="updateX(10)">Click to increase by 10</a>
</div>
一切都按预期工作,因为 updateX() 仅在初始化和单击时调用。
2)第二个例子有无穷循环,就像你的例子一样:
<div ng-app="" ng-controller="MyController">
{{printX(0)}}
{{updateX(5)}}
<br/><a ng-click="updateX(10)">Click to increase by 10</a>
</div>
为什么?让我们看看 angular 是如何编译这个视图的:
1) {{printX(0)}} - 打印当前 x 值并等待有人触摸 x
2) {{updateX(5)}} - 更新 x 值,并且由于它也依赖于 x,因此它还等待有人触摸 x
3) {{printX(0)}} - 作为步骤 2) 更改了 x 值,此函数再次调用并打印 x 值(并同时触摸 x 值)
4) {{updateX(5)}} - 作为步骤 3) 触摸 x 值,此函数再次调用。
5)等。
与您的示例相同:
<br/>Add 10 : {{update2(10)}}
<br/>Add 10 : {{update2(10)}}
第一次调用 update2(10) 时,它会将 10 添加到 x,并等待 x 更改。第二次调用它时,再次更改 x 值,这会导致再次调用第一个函数,在第二次调用之后再次调用,依此类推。
当您绑定到 AngularJS 中的函数时,每当函数中使用的变量之一发生变化时,它都会重新计算该函数。
由于 update1 和 update2 更改了 $scope.x,因此它会在无限循环中一次又一次地重新计算函数,因为 $scope.x 在这些函数中使用。
现在,为什么它没有在控制器 1 中发生?确实如此,您只是看不到它,因为在 Controller1 中的每个循环结束时,$scope.x 的值将返回为 0 (0 + 10 + 50 - 60 = 0),因此无论您遍历这些函数多少次$scope.x 都将始终等于相同的值。
在控制器 2 中,$scope.x 的值在每个循环结束时为 10(0 + 10 + 10 + 50 - 60 = 10),因此 $scope.x 的值在每个循环后提高 10。因此,如果存在无限循环,为什么我的浏览器不冻结并且仍然在 controller2 上显示一些值?因为 AngularJS 在 10 次迭代后停止循环$digest(这就是为什么 $scope.x 在最后一次迭代开始时等于 10($scope.x 在每次迭代后
此外,parseInt
是多余的,因为您传递的变量已经是整数。
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 在chrome.tabs.onCreated之后加载HTML页面
- 在Jquery detachment()和appendTo()之后定位元素
- AngularJS:ng之后,重复$scope值未按预期更新
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 为什么元素的宽度在页面加载之后和那一刻之后不同
- 检测个位数整数时正在转换毫秒
- 限制javascript变量的最小/最大整数
- 如何在 Javascript 中将变量的值从字符串转换为整数
- 正则表达式只允许 x 个整数
- 没有在Angular应用程序中定义firebase(在firebase迁移之后)
- 我想在AngularJS应用程序中创建一个输入数字框,用户不应该在该框上键入十进制数字.(一个整数输入框)
- 如何在Chartjs中制作整数比例
- Javascript复选框函数:;缺少:在属性id之后"
- 在刚刚调用的append函数之后,jquery.height()不会返回实际值
- 减去两个索引不同但值相同的整数
- 使用jquery从整数中减去
- 正在链接添加了以下内容::在之后
- JQuery hide()在show()之后不起作用,反之亦然
- Angularjs:即使在我将变量解析为整数之后,也会添加整数