问题
- Yesterday, I started writing a
notification directive
for my project - I asked question on stackoverflow AngularJS: Alerts not showing up and after struggling through documents and videos, I am able to build a basic notification directive http://plnkr.co/edit/uqSB1gIz6XEmJfC8zHNb?p=preview
What I want?
Like any other app, when alerts show up, they hide after a second or so, I am trying to find out a way to hide the alert after a second, but not sure how to do that
Any help is greatly appreciated
UPDATE
As per @Derek's answer, I am able to implement timeout
http://plnkr.co/edit/uqSB1gIz6XEmJfC8zHNb?p=preview
回答1:
Generally I would implement notifications with an array, that pushes new notifications onto the stack, then sets a $timeout that removes that particular element from the array. On the rendering side you would just use an ng-repeater.
However in your case, if you want to keep your existing directive you could accomplish this functionality by just adding a linking function and setting a $timeout to remove the element.
app.directive('notification', function($timeout){
return {
restrict: 'E',
replace: true,
scope: {
ngModel: '='
},
template: '<div class="alert fade" bs-alert="ngModel"></div>',
link: function(scope, element, attrs){
$timeout(function(){
element.remove();
}, 5000);
}
}
});
回答2:
I have updated plunker created by @daydreamer to show multiple alerts and hide automatically. If anybody wants to customized multiple alerts have a look at this Plunker Link
Half of the code same as @DerekR, I have only made customization to it
var app = angular.module('myApp', ['$strap.directives']);
app.directive('notification', function($timeout){
return {
restrict: 'E',
replace: true,
scope: {
ngModel: '='
},
template: '<div class="alert fade" bs-alert="ngModel"></div>',
link: function(scope, element, attrs) {
$timeout(function(){
element.hide();
}, 3000);
}
}
});
app.controller('AlertController', function($scope){
$scope.message = {
"type": "info",
"title": "Success!",
"content": "alert directive is working pretty well with 3 sec timeout"
};
$scope.alerts = [];
$scope.addAlert = function(index) {
$scope.alerts.push(
{
"type": "info",
"title": "Success!" + index,
"content": "alert " + index + " directive is working pretty well with 3 sec timeout"
}
)
}
});
来源:https://stackoverflow.com/questions/16824157/angularjs-directive-how-do-i-hide-the-alert-using-timeout