setTimeout中的函数不修改$ scope variables / CSS属性

时间:2015-05-29 19:12:09

标签: javascript html css angularjs

我正在与setTimeout()战斗,甚至无法掌握问题所在。我首先认为这是一个范围问题,但无法修复它。

我想延迟DIV的隐藏/取消隐藏,让我的CSS过渡到不透明度,但当我点击alert_button淡出然后隐藏警报时,它只会消失,我只剩下了有一个看不见的div。延迟$ scope.alert_token没有切换到' true'并且警报的不透明度停留在1。

app.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)
    }

1 个答案:

答案 0 :(得分:1)

在角度知识之外发生的任何事情都不会更新到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