2

我刚刚开始使用angular-flash并且消息即将出现,但是我应该在哪里清除消息?

我只是在每个动作下设置 flash.message('') 还是将其放在某处的路线中?有没有办法在计时器上做到这一点,让它淡出?我在代码中看到有一个超时功能,但我在哪里初始化它?

4

3 回答 3

1

我正在查看源代码以尝试弄清楚发生了什么,当您想清除消息时,一个快速而肮脏的修复方法是这样做:

flash([]);

由于您所有的闪存消息都在一个数组中,我假设您可以像处理任何数组一样处理它。

我说它很脏的原因是因为我假设有更好的方法来做到这一点,比如 clear() 或 empty() 函数。

于 2013-09-11T07:07:03.250 回答
1

我找到了清除的答案:

  flash('notice', 'User details updated!')
  $location.path "/users/#{$stateParams['id']}"
  $timeout (-> flash()), 2000
于 2013-09-12T01:10:14.680 回答
0

你可以用你自己的服务来包装它:

'use strict';

angular.module('myApp')
  .service('ff', ['$rootScope', 'flash', '$timeout', function ($rootScope, flash, $timeout) {

    var log = function(level) {

      function inner(msg, sticky) {
        if (level == 'info') flash(msg);
        else flash(level, msg);
        var promise = $timeout(function() {
          var idx = _.findIndex($rootScope.messages, ['text', msg]);
          $rootScope.messages.splice(idx, 1);
        }, 2000);
        if (sticky) {
          $timeout.cancel(promise);
        }
      }

      return inner;
    };

    return {
      info: log('info'),
      error: log('error'),
      warn: log('warning'),
      success: log('success')
    };
  }]);

在控制器中:

ff.info("This will go away.");

ff.error("This will stick", true);

现在遗憾的是,多次调用flash不只是附加到一个数组,即将此行替换为

if (typeof $scope.messages !== 'undefined') {
  $scope.messages = $scope.messages.concat(messages);
} else {
  $scope.messages = messages;
}
于 2018-01-12T11:26:09.513 回答