实现AngularJS非中断UI弹出消息
我将要开发一个UI消息传递系统,在UI中显示信息/警告/错误消息。我在jQuery中开发了类似的东西,但现在我要为AngularJS做这件事 消息传递的工作原理非常简单,只需在某个屏幕位置显示固定位置的消息,并保持显示一段时间(取决于使用最小时间+每字时间计算的内容长度),然后自动从视图中消失 信息和警告消息会自动消失,而错误需要通过用户鼠标单击显式关闭,这样我们才能确保他们看到它们(实际上,在长时间取消阻止消息队列后,它们也会自动关闭) 此消息传递系统还负责消息排队,因为一次只显示一条消息。除非收到错误消息,否则此队列将作为FIFO工作。错误消息作为后进先出(LIFO)推送到队列中,因为它们更重要 无论如何。我想分两部分来做:实现AngularJS非中断UI弹出消息,angularjs,service,directive,Angularjs,Service,Directive,我将要开发一个UI消息传递系统,在UI中显示信息/警告/错误消息。我在jQuery中开发了类似的东西,但现在我要为AngularJS做这件事 消息传递的工作原理非常简单,只需在某个屏幕位置显示固定位置的消息,并保持显示一段时间(取决于使用最小时间+每字时间计算的内容长度),然后自动从视图中消失 信息和警告消息会自动消失,而错误需要通过用户鼠标单击显式关闭,这样我们才能确保他们看到它们(实际上,在长时间取消阻止消息队列后,它们也会自动关闭) 此消息传递系统还负责消息排队,因为一次只显示一条消息。除
问题如果指令控制定时,何时应显示服务发出消息
问题如果不是由另一条从指令返回到服务的消息启动,如何实现由用户启动的错误消息隐藏
messageService.Show(type,message)
,指令实现其他一切-排队、计时、显示/隐藏问题没有预想到
我应该如何实现我的服务才能真正拥有一些功能(智能消息服务)和一个愚蠢的指令,它只会使用服务告诉它做的任何事情?我实际上实现了一些非常接近您想要做的事情。也许这些代码片段可以帮助您。 这只是一个快速的解决方案,没有经过真正的测试,但它可能会给你一个想法 指令
angular.module( 'app' )
.directive( 'alerter', function ( $timeout, alert )
{
return {
templateUrl: 'app/directives/alerter/alerter.html',
restrict: 'E',
scope: {},
link: function ( $scope )
{
$scope.alerts = alert.alerts;
$scope.closeAlert = function ( index, actualElement )
{
alert.remove( index, actualElement );
};
$scope.$watchCollection( 'alerts', function ( newAlerts )
{
$timeout( function ()
{
$scope.closeAlert( newAlerts.length - 1, newAlerts[newAlerts.length - 1] );
},
10000 );
} );
}
};
} );
angular.module( 'app' )
.factory( 'alert', function ()
{
var alerts = [],
_TYPES = {
ERROR: 'danger',
SUCCESS: 'success'
};
function add( type, message )
{
alerts.push( {type: type, msg: message} );
}
function remove( index, actualElement )
{
alerts.splice( index, 1 );
}
// Public API here
return {
alerts: alerts,
TYPE: _TYPES,
add: function ( type, message )
{
return add( type, message );
},
remove: function ( index)
{
return remove( index);
}
};
} );
模板(使用UI引导警报)
如何在控制器中添加警报
angular.module( 'app' )
.controller( 'SomeCtrl', function ( $scope, alert)
{
...
$scope.showError = function() {
alert.add( alert.TYPE.ERROR, 'An error occured!' );
};
...
} );
无论何时,我都希望能够显示我正在添加指令的警报:
<alterter></alerter>
很抱歉,在我读了标题的前三个字之后:“实现AngularJS不引人注目”我无法继续阅读…在我看来,AngularJS和unobtrusive是两个不能结合在一起的词。不过祝你好运!阅读AngularUI中模式服务的源代码。这里是$modal service控制显示对话框的指令。@Josep:为什么?unobtrusive与用户有关,而不是像AngularJS这样的库。:)@RobertKoritnik我的错,我应该继续阅读,在过去,低调几乎是让所有体验都可以用于禁用JS的浏览器的同义词…:$事实上,你的问题很有趣+1(我现在必须上床睡觉,但我会在接下来的12-16小时内回答)@Josep:但你说的不引人注目的意思是对的。这两种情况都可以理解。它与代码有关,但也与代码在UI方面的工作方式有关,因此。。。我用不同的术语重新表述了我的问题。哦,当删除警报时,你应该确保你真的删除了rihgt警报。由于它可能已被用户或$timeout删除,因此控制器也应参考alert
服务。我知道。。。您刚刚错过了它…感谢您的提示,我错过了:(编辑了它!您可以始终将其设置为私有,因为您需要在指令模板中访问这些项,您可以通过函数getAll()公开它们)
或其他什么。这样,您可以在服务的功能范围内保护它们的私有性,而外部消费者将无法以任何方式操纵它们。但这当然只是做代码审查的人的建议。是的,这就是我在代码中实际使用的方法。+1
<alterter></alerter>