javascript - setTimeout 中的函数不会修改 $scope 变量/CSS 属性

标签 javascript html css angularjs

我正在与 setTimeout() 作斗争,甚至无法理解问题所在。我首先认为这是一个范围问题,但无法修复。

我想延迟 DIV 的隐藏/取消隐藏,让我的不透明度 CSS 过渡开始,但是当我单击 alert_button 淡出然后隐藏警报时,它只会淡出,我只剩下一个不可见的 div .延迟的 $scope.alert_token 没有切换到“true”,我的警报的不透明度停留在 1。

应用程序.js:

angular.module('myApp', [])
.controller('myCtrl', function($scope) {
    $scope.alert_token = true // hide if true
    $scope.alert_message = ""
    $scope.p_name = ""

    $scope.isInArray = function(arr, item) {
        // IF ITEM IS ALREADY IN ARRAY
        if (arr.indexOf(item) > -1) {
            $scope.alert_token = !$scope.alert_token
            $scope.alert_message = "Entry already exists"
            setTimeout(function() {
                document.getElementById("alert").style.opacity = "1"
            }, 305)
        }
        else ...
    }

    $scope.submit = function(listType) {
        if (listType == "player") {
            $scope.isInArray(p_list, $scope.p_name)
            $scope.p_name = ""
        }
        else ...
    }

    $scope.closeAlert = function() {
        document.getElementById("alert").style.opacity = "0"
        setTimeout(function() {
            $scope.alert_token = !$scope.alert_token
        }, 305)
    }

最佳答案

发生在 Angular 知识之外的任何事情都不会更新到 DOM。在你的情况下它的 setTimeout。而是使用 $timeout

......
.controller('myCtrl', function($scope, $timeout) {...
                                       ^^^^^^^^
//Other code
....
   $scope.closeAlert = function() {
        document.getElementById("alert").style.opacity = "0"
        $timeout(function() {//$timeout
            $scope.alert_token = !$scope.alert_token
        }, 305)
    }

此外,由于您使用的是 angularJS,要更新 CSS 属性,我建议您使用 ngClass ngStyle

关于javascript - setTimeout 中的函数不会修改 $scope 变量/CSS 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30537349/

相关文章:

javascript - 我如何使用 Sinon stub $(window).width() ?

javascript - 如何从不同的提交按钮向 ng-submit 传递不同的参数?

javascript - ajax提交表单为什么不能回显$_POST

javascript - "animate-delay: 1s;"还在进行时隐藏div,延时后显示

javascript - 有没有办法检测何时要从 DOM 中删除 DOM 节点?

html - 尝试用 div 替换表格但部分成功

html - 由于宽度 :100% attribute,Google Chrome 中的滚动不稳定

html - 水平下拉菜单一行不显示两个词

javascript - Bootstrap 轮播在响应时没有反应

javascript - 仅当窗口关闭时才触发 onbeforeunload (包括工作示例)