Foxandxss / angular-toastr

Angular port of CodeSeven/toastr.

Home Page:http://foxandxss.github.io/angular-toastr/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Library ToDo

Foxandxss opened this issue · comments

There are the things I want to accomplish for the first release:

  • Animations
  • More types of animations
  • Callback/promise when finish
  • Be able to change the stacking order (Issue #6275)
  • Override options per toastr
  • Proper tests :)
  • Remove last / all toastr
  • Custom templates (Something to investigate)
  • Awesome demo
  • Sticky toasts

what about a permanently displayed toast for validation errors?

me thinks...

Nah, the idea is to match the original toastr. Anyway, you can put the timeOut to 0 so it will be permanently

Me again... didn't know the timeout to 0... thanks...
in the Hottowel template, Papa has a factory Logger that encapsulates the jquery dependent Toaster. Nevertheless, when I try to inject your excellent version, it throws a circular depencency. I'm new to Angular, and don't know how to manage your directive to be encapsulated to the Logger or something equivalent... any ideas on the matter?
Thanks in andvace.

Miguel Delgado

Yes I do.

This is not a problem with my library, it is just a couple of services in angular that are problematic in this manner.

The problem is because the exceptionHandler (I guess you are talking about it, I also played with Hottowel) is one of those problematic services.

If you have a library x that injects a service which needs the exception handler (a core service) and then the exception handler requires that x service. That would cause a circular dependency error. That is a very common issue with the exception handler (and a few more services).

The problem also resides when Angular tries to resolve every dependency in "compile" time. That will throw the error.

The solution is to load in runtime a dependency when needed, that way it wouldn't throw any error.

Check this:

(function() {
  'use strict';

  angular.module('app').factory('$exceptionHandler', exceptionHandler);

  exceptionHandler.$inject = ['$injector'];

  function exceptionHandler($injector) {
    return function(exception, cause) {
      var logger = $injector.get('logger');
      var config = $injector.get('config');
      var appErrorPrefix = config.appErrorPrefix;
      var logError = logger.getLogFn('app', 'error');

      var errorData = { exception: exception, cause: cause };
      var msg = appErrorPrefix + exception.message;
      logError(msg, errorData, true);
    };
  }
}());

That is how you would resolve the issue following Papa's code conventions. Check how I load logger manually INSIDE the return function (loading it by hand when the service is injected wouldn't resolve the issue).

I don't recall if the config service needs to be injected that way too, I was playing with that and I don't have time at the moment to try that.

The logger will inject toastr normally then.

So the rule here is when you have a circular dependency problem, check that there is no something obviously broken and if not, inject by hand the problematic dependency (no need to load everything by hand, just the problematic one) when you need it.

Wow! thanks a lot, this seems to be a really good tip. I will check against my code (already a variant from Hottowel) and let you know...

Thanks

@Foxandxss thank you for circular dependency solution, i`ve just implemented it to my project, but when error is handled, i get - "logger.getLogFn is not a function". Do you have any idea how to solve it?

Thanks in advance!