Javascript AngularJS$超时服务

Javascript AngularJS$超时服务,javascript,angularjs,Javascript,Angularjs,我必须在3-4秒内看到一些东西。我正在尝试使用$timeout来实现这一点。以下是我目前得到的信息: $timeout(function() { debugger; $scope.$on(broadcastService.topErrorBar.show, function(event, message) { $scope.rootElement.addClass('is-visible'); $scope.isVisible = true; $scope.m

我必须在3-4秒内看到一些东西。我正在尝试使用$timeout来实现这一点。以下是我目前得到的信息:

$timeout(function() {
  debugger;
  $scope.$on(broadcastService.topErrorBar.show,
  function(event, message) {
    $scope.rootElement.addClass('is-visible');
    $scope.isVisible = true;
    $scope.message = message;
  });
}, 3000);

$timeout.cancel(function() {
    $scope.close();
});

$scope.close = function() {
  $scope.rootElement.removeClass('is-visible');
  $scope.isVisible = false;
};
这不起作用,我无法解决问题。我做错了什么?在这种情况下,我应该使用超时。

那么:

$scope.$on(broadcastService.topErrorBar.show,
      function(event, message) {
          $scope.isVisible=false; 
           $timeout(function () { $scope.isVisible= true; }, 3000); 
      });

您必须在html中使用show=“isVisible”>

它应该是这样的:

$scope.$on(broadcastService.topErrorBar.show,
  function(event, message) {
    $scope.rootElement.addClass('is-visible');
    $scope.isVisible = true;
    $scope.message = message;
    $timeout(function() {
    $scope.close();
}, 3000);

$scope.close = function() {
  $scope.rootElement.removeClass('is-visible');
  $scope.isVisible = false;
};

在广播时,使元素可见,启动超时,以便在3秒后调用$scope.close。不需要$timeout。在您的情况下取消。

您的逻辑颠倒了。超时中的函数在时间过后激发。您希望元素可见,然后在超时函数中将可见性设置为false。这里有一个例子

var-app=angular.module('myApp',[]);
app.controller('myCtrl',函数($scope,$timeout){
$scope.visible=true;
$timeout(函数(){
$scope.visible=false;
}, 3000);
});

这总是可见的。
这应该在3秒后隐藏

最佳解决方案imo。