Angular Bootstrap 警报不会在超时时关闭

Posted

技术标签:

【中文标题】Angular Bootstrap 警报不会在超时时关闭【英文标题】:Angular Bootstrap alerts do not dismiss on a timeout 【发布时间】:2014-12-17 21:36:44 【问题描述】:

我正在尝试从 Angular Bootstrap 添加警报并在超时时自行关闭。然而,它并没有放弃自己。代码如下:

angular.module('ui.services').service('AlertService', [
  function () 
    var alerts = [];
    this.add = function(type, msg)
        var self = this;            
        return alerts.push(
            type: type,
            msg: msg,
            close: function() 
                return self.closeAlert(this);
            
        );
        $timeout(function() 
            self.closeAlert(this); 
        , 3000);

    ,
    this.closeAlert = function(alert) 
        return this.closeAlertIdx(alerts.indexOf(alert));
    ,
    this.closeAlertIdx = function(index) 
        return alerts.splice(index, 1);
    ,
    this.alertData = function() 
        return alerts;
    
]);

我已经设置了超时,但不知道出了什么问题。

【问题讨论】:

所以在 ControllerA $scope.alerts = AlertService.alertData();在控制器 B 中,我添加了要显示为 AlertService.add('success', "this is deleted", true); 的警报。所以我将 $scope .alerts 绑定到警报服务中定义的本地警报数组 【参考方案1】:

您的$timeout 永远不会被调用,因为您刚刚返回。

否则,乍一看,一切似乎都是正确的。

【讨论】:

所以在我在这里返回之前我不确定如何运行超时 什么意思?把它放在之前返回 是的,我明白了,但在这种情况下,警报甚至没有显示,因为警报没有被触发,因为在两个控制器之间使用的 $scope 属性稍后会使用来自的警报数组进行初始化警报服务电话 我不确定我是否理解... $scope 属性是什么?您可能需要显示更多代码或创建一个新问题。 所以在 ControllerA 我有 $scope.alerts = AlertService.alertData();在控制器 B 中,我添加了要显示为 AlertService.add('success', "this is deleted", true); 的警报。所以我将 $scope .alerts 绑定到警报服务中定义的本地警报数组 -【参考方案2】:

https://github.com/angular-ui/bootstrap/blob/master/src/alert/alert.js#L22-L31

<alert dismiss-on-timeout='2000'>...</alert>

【讨论】:

以上是关于Angular Bootstrap 警报不会在超时时关闭的主要内容,如果未能解决你的问题,请参考以下文章

Angular UI Bootstrap 警报未关闭

我的 Bootstrap 警报在关闭后不会显示

如何使用 AngularJS 使用 Bootstrap 警报

使用 angular2 显示引导警报

Angular会话超时和管理[重复]

Bootstrap 4 导航栏不会在 Angular 4 中折叠