Javascript 使用角度控制器中的while循环更新视图

Javascript 使用角度控制器中的while循环更新视图,javascript,angularjs,Javascript,Angularjs,我正在学习angular.js,想知道是否有办法从while循环更新视图。我有一个被点击的按钮,它调用一个带有while循环的函数,该循环为每次迭代增加一个变量。有一个取消循环的按钮。我已经阅读并理解angular用于更新视图的$apply/$digest循环。我还修改了$interval并使其正常工作,但最终它的速度还不够快,不足以满足我最终的需要 那么,有没有一种方法可以让在while循环中递增的变量打印到屏幕上呢。这是我到目前为止的代码 LearningAngular.js var my

我正在学习angular.js,想知道是否有办法从while循环更新视图。我有一个被点击的按钮,它调用一个带有while循环的函数,该循环为每次迭代增加一个变量。有一个取消循环的按钮。我已经阅读并理解angular用于更新视图的$apply/$digest循环。我还修改了$interval并使其正常工作,但最终它的速度还不够快,不足以满足我最终的需要

那么,有没有一种方法可以让在while循环中递增的变量打印到屏幕上呢。这是我到目前为止的代码

LearningAngular.js

var myApp=angular.module(“myApp”,[]);
myApp.controller(“myController”,myController);
函数myController($scope,$interval){
var计数=真;
$scope.counter=0;
$scope.start\u count=函数(){
//promise=$interval(函数(){
//$scope.counter++;
//},1);
while(count==true){
$scope.counter++;
}   
}
$scope.stop_counting=函数(){
//$interval.取消(承诺);
计数=假;
}
}

学习角度
开始计数
计数器:{{Counter}}
停止计数
而您实现的循环发生在$apply/$digest的单个迭代中,因此它永远不会看到计数器的更改。我不确定使用angular实现expect行为的正确方法是什么,但您可以使用setInterval或setTimeout函数使用纯javascript轻松实现这一点。除了调用setInterval而不是启动while循环之外,逻辑将与您实现的完全相同。
希望这能有所帮助。

因为你的循环无穷无尽。您单击停止观看未被触发

无限循环背后的原因:一旦它作为参数传递给while。它是一个局部变量,不会被重写,因此它会成为无止境的循环

问题:您正在调用
count
,它是模型值,而不是方法
start\u counting
解决方案:
$scope
$interval
作为第二个参数传递给控制器方法。下面是工作演示

var myApp=angular.module(“myApp”,[]);
myApp.controller('myController',['$scope','$interval',',
函数($scope,$interval){
$scope.counter=0;
var停止;
$scope.start\u count=函数(){
如果(角度定义(停止))返回;
$scope.counter++;
stop=$interval(函数(){
$scope.counter++;
}, 100);
}
$scope.stop_counting=函数(){
如果(角度已定义(停止)){
$interval.cancel(停止);
停止=未定义;
}
}
}
]);

开始计算

计数器:{{Counter}}
停止计数
我认为可能您的错误在于您在ng click中使用的函数名,因为在控制器中您称其为start\u count,但在ng click count()中

请使用工作演示和参考检查我的答案,以便您理解。请参考编辑的帖子。您不能覆盖while循环中传递的私有变量。参考答案。在通过ng单击调用函数时检查nowNice catch,但这不是问题所在。在我试图学习这一点的过程中,我在原始代码中有很多其他函数。我对代码进行了编辑,使其显示我所要求的内容,但忘记在html文件中更改它。是的,我发现了这一点,但这并不是整个问题。