我刚刚开始使用angular-flash并且消息即将出现,但是我应该在哪里清除消息?
我只是在每个动作下设置 flash.message('') 还是将其放在某处的路线中?有没有办法在计时器上做到这一点,让它淡出?我在代码中看到有一个超时功能,但我在哪里初始化它?
我刚刚开始使用angular-flash并且消息即将出现,但是我应该在哪里清除消息?
我只是在每个动作下设置 flash.message('') 还是将其放在某处的路线中?有没有办法在计时器上做到这一点,让它淡出?我在代码中看到有一个超时功能,但我在哪里初始化它?
我正在查看源代码以尝试弄清楚发生了什么,当您想清除消息时,一个快速而肮脏的修复方法是这样做:
flash([]);
由于您所有的闪存消息都在一个数组中,我假设您可以像处理任何数组一样处理它。
我说它很脏的原因是因为我假设有更好的方法来做到这一点,比如 clear() 或 empty() 函数。
我找到了清除的答案:
flash('notice', 'User details updated!')
$location.path "/users/#{$stateParams['id']}"
$timeout (-> flash()), 2000
你可以用你自己的服务来包装它:
'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;
}