gpt4 book ai didi

javascript - 使用 'alert' 时出现意外的 Angular 行为

转载 作者:行者123 更新时间:2023-11-28 11:52:39 25 4
gpt4 key购买 nike

我正在学习/实验 Angular,并偶然发现了一些奇怪的行为(在我看来)。我用尽可能小的示例重新创建了我的问题 - 原始代码要长得多。

我想要做什么:
用户可以输入名称。每当名称等于“error”时,其颜色将变为红色并显示警报。当用户解除警报(通过单击“确定”)时,名称将重置为“初始名称”并再次变为绿色。

它不做什么:
当名称变为“error”时,其颜色不是红色。

Name is still green

代码:

<html   lang="en-US" ng-app="myApp" ng-controller="myCtrl">
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<body>
<div>
<input ng-model="name" ng-style="{color: myColor}"/>
</div>
</body>

<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $document) {
$scope.name = "initial name";
$scope.myColor = "green";
$scope.$watch('name', function() {
if($scope.name === "error") {
$scope.myColor = "red"; // This line has no effect?
alert("Not allowed! Resetting...");
$scope.name = "initial name";
} else {
$scope.myColor = "green";
}
});
});
</script>

我知道更改 $scope.myColor 应该改变颜色(如果我删除 else 子句,它会永远保持红色),但似乎 alert 是由于某种原因阻止所需的行为。我还更改了 if 子句内的行顺序,但这没有帮助。

问题:
这里有哪位天才可以解释为什么“错误”不会变成红色?
(我真的不需要解决方案,我只是想知道为什么会发生这种情况。)

最佳答案

alert() 是一个阻塞调用,它会阻塞其他所有内容,直到它被解除为止。因此,$scope.myColor 更改为红色,但在 Angular 摘要周期完成之前,会弹出警报并阻止其他所有内容。一旦您消除警报,名称就会重置,颜色也会恢复正常。

由于一切都在几毫秒内发生,因此您无法看到它。因此,如果您将警报设置为 1-2 秒超时,您应该能够看到错误的红色。

关于javascript - 使用 'alert' 时出现意外的 Angular 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33009077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com