为什么 angularJS 在使用 setInterval() 方法时无法侦听文本输入
Why angularJS fails to listen text input when using setInterval() method?
这是我的代码
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js">
</script>
<body ng-app="" style="background:{{val}};" id="body">
<input type="text" ng-model="val" id="color-input">
<input type="button" onclick="render()" value="Render">
</body>
<script>
function render(){
setInterval(function(){myTimer()},5000);
}
var i=0;
function myTimer() {
if(i<4){
colors=["red","green","blue","grey"];
document.getElementById("color-input").value=colors[i];
i++;
}
else
i=0;
}
</script>
我正在使用 5 秒的计时器。但是当我按下渲染按钮时,身体的背景颜色保持不变。
您需要
使用角度模块化方法的第一件事,方法是创建angular.module
添加控制器,指令,过滤器等组件。然后在ng-app
指令中提供该模块。此外,您不应使用选择器来获取输入字段的值,因为您已经将ng-model
附加到该字段,这将使您在控制器范围内使用该值。
你不应该使用原生的javascript,它在角度上下文中不起作用,你需要用ng-click
和setInterval
替换onclick
$interval
这一切都将位于角度控制器中。通过使用来自外部角度上下文的本机方法,更新角度的绑定将产生问题,因为它们不会运行摘要循环。在这种情况下,您需要手动运行以消化循环,这在 Angular 中执行代码时被认为是非常糟糕的编码。
标记
<body ng-app="app" style="background:{{val}};" id="body" ng-controller="mainCtrl">
<input type="text" ng-model="val" id="color-input">
<input type="button" ng-click="render()" value="Render">
</body>
控制器
angular.module('app', [])
.controller('mainCtrl', function($scope, $interval) {
//code here
$scope.render = function() {
$interval(function() {
myTimer()
}, 5000);
}
var i = 0;
function myTimer() {
if (i < 4) {
colors = ["red", "green", "blue", "grey"];
$scope.val = colors[i];
i++;
} else
i = 0;
}
});
相关文章:
- 尝试在PHP中回显输入文本时出现未定义的索引错误
- 使用模拟按键在输入框中自动输入文本
- 如何添加类,同时开始在文本字段中输入文本
- JQuery使用相同的功能自动完成各种输入文本
- 如何设置输入文本框jquery的值
- 输入文本框为空时的阻止按钮asp.网络表单
- 基于单选框更新页眉,选中并选择输入文本
- 将输入文本与某个选项的值相匹配并自动选择
- 如何在 JavaScript 中创建输入文本框
- 如何使用纯Javascript观看输入文本框
- 需要使用javascript获取输入文本,然后将其添加到句子中
- php&js-将电子邮件添加到输入文本中
- 动态启用/禁用来自控制器的输入文本
- .val()不返回输入文本
- 从确认框中预填充输入文本框
- 如何使用JavaScript解析输入文本中给定的数据
- 添加/删除/更改输入文本的部分值
- 根据输入文本按元素排序,AngularJS
- 如何将(a*b)两个输入文本值相乘,并在javascript中随文本变化动态显示
- 如何从Tr重复的输入文本中获取值