Git Product home page Git Product logo

Comments (6)

mdelgadov avatar mdelgadov commented on July 22, 2024

what about a permanently displayed toast for validation errors?

me thinks...

from angular-toastr.

Foxandxss avatar Foxandxss commented on July 22, 2024

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

from angular-toastr.

mdelgadov avatar mdelgadov commented on July 22, 2024

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

from angular-toastr.

Foxandxss avatar Foxandxss commented on July 22, 2024

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.

from angular-toastr.

mdelgadov avatar mdelgadov commented on July 22, 2024

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

from angular-toastr.

sergeydevhub avatar sergeydevhub commented on July 22, 2024

@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!

from angular-toastr.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.