请教一个关于angularjs的小问题

我是angularjs的一个新手,今天在项目中遇到这样的一个问题
我想在1S种以后给div隐藏掉,但是一直没效果,
求解,为什么一直没反应

<div ng-show="on">111</div>

app.controller('myinfoCtrl', ['$scope'],function($scope) {
    $scope.on=true;
    setTimeout(function(){
        console.log($scope.on)
        $scope.on=false;
        console.log($scope.on)
    },1000)
}
阅读 2.5k
5 个回答
<!DOCTYPE html>
<html ng-app="app">
<head>
    <title></title>
    <script type="text/javascript" src="angular.min.js"></script>
</head>
<body ng-controller="myinfoCtrl">

<div ng-show="on">111</div>

<script type="text/javascript">
    var app = angular.module('app', []);
    app.controller('myinfoCtrl', ['$scope',function($scope) {
        $scope.on=true;
        setTimeout(function(){
            console.log($scope.on)
            $scope.on=false;
            $scope.$apply();
            console.log($scope.on)
        },1000)
    }]);
</script>
</body>
</html>

在回调函数里需要手动调用$scope.$apply();

或者使用$timeout
http://www.cnblogs.com/ys-ys/...

望采纳,谢谢

用$timeout:

app.controller('myinfoCtrl', ['$scope','$timeout'],function($scope,$timeout) {
    $scope.on=true;
    $timeout(function(){
        $scope.on=false;
    },1000)
}

直接在setTimeout中改变$scope中绑定的变量不会触发变量的脏数据检查,变量变化不会被同步到界面,因此界面也不会做出更改。

我没用过setTimeout, 不过把setTimeout换成$timeout 可以实现你说的效果

<div ng-show="on">111</div>

app.controller('myinfoCtrl', ['$scope'],function($scope) {

$scope.on=true;
setTimeout(function(){
    $scope.$apply(function(){
        $scope.on=false;
    });
},1000)

}
用setTimeout不会触发$digest循环,建议用angular封装好的$timeout吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏