Je dois mettre en œuvre une interface utilisateur de notification standard avec des JS angulaires. Mon approche est la suivante (simplifiée): et avec le contrôleur de page étant: p> Cela fonctionne bien. Mais je n'aime vraiment pas le fait que j'ai besoin d'appeler $ portée. $ Parent. P> Parce que si je suis dans un autre contrôleur imbriqué, je vais avoir une portée. $ Parent. $ Parent, et ceci devient rapidement un cauchemar pour comprendre. p> existe-t-il une autre façon de créer ce type de notification mondiale d'interface utilisateur avec angulaire? p> p>
5 Réponses :
Après avoir regardé ceci: Quelle est la bonne façon Pour communiquer entre les contrôleurs en angularjs? , puis que: https://gist.github.com / flottantmonkey / 3384419
J'ai décidé d'utiliser pubsub, voici ma mise en œuvre: p>
Coffeescript: P>
module.factory("PubSub", function() { var cache, publish, subscribe, unsubscribe; cache = {}; subscribe = function(topic, callback) { if (!cache[topic]) { cache[topic] = []; } cache[topic].push(callback); return [topic, callback]; }; unsubscribe = function(topic, callback) { var callbackCount; if (cache[topic]) { callbackCount = cache[topic].length; while (callbackCount--) { if (cache[topic][callbackCount] === callback) { cache[topic].splice(callbackCount, 1); } } } return null; }; publish = function(topic) { var callbackCount, event, res; event = cache[topic]; if (event && event.length > 0) { callbackCount = event.length; while (callbackCount--) { if (event[callbackCount]) { res = event[callbackCount].apply({}, Array.prototype.slice.call(arguments, 1)); } } publish(topic + "_done"); return res; } }; return { subscribe: subscribe, unsubscribe: unsubscribe, publish: publish }; });
J'utilise pubsub pour communiquer entre les contrôleurs et cela fonctionne assez bien.
Utilisez des événements pour envoyer des messages d'un composant à un autre. De cette façon, les composants n'ont pas besoin d'être liés du tout.
Envoyer un événement d'un composant: p> et créer un auditeur partout que vous aimez, par exemple. Dans un autre composant: p> app.controller('MainCtrl', function($scope, $rootScope) {
$scope.$on('divButton:clicked', function(event, message){
alert(message);
})
});
Vous devriez vérifier ceci: Un composant angularjs pour créer facilement des notifications. Peut également utiliser des notifications HTML5. https://github.com/phxdataSec/angular-notifications p>
Ce projet semble être abandonné. Quelqu'un d'autre a pris la maintenance et a fusionné plusieurs PR à l'adresse suivante: github.com/phxdatasec/angular-notifications. Voir Annonce à: GITUB.COM/DEREKRIES/ANGULAIRE-NOTTIFICATIONS/RISSUS/13
Ma suggestion est de ne pas créer un seul. Utilisez des modèles existants comme Toastr ou quelque chose comme ci-dessous. http://beletsky.net/ng-notiformations-bar/ p>
Comme suggéré ci-dessus, essayez d'utiliser une bibliothèque de notifications externes. Il y a une grande variété d'entre eux: p>
Essayez de créer un service qui contiendrait vos messages et d'injecter le service aux deux contrôleurs. Juste Google pour "Communiquer les contrôleurs angularjs", il montrera des tonnes de liens.