ng-classify icon indicating copy to clipboard operation
ng-classify copied to clipboard

Resolve dependency injection

Open nahue opened this issue 9 years ago • 9 comments

When using resolve for ex with the "messages" var.. throws DI error.. because its loaded in the array as a dependency.. but its not.

Is there a way of avoiding this? Thanks!

ex:

resolve: lives: (LiveService) -> LiveService.getAll()

class Home extends Controller constructor: ($scope, $state, Faye, authenticationService, lives)

turns into

['$scope', '$state', 'Faye', 'authenticationService', 'lives' ...]

nahue avatar Mar 24 '15 04:03 nahue

Try using a factory to represent the lives resolve function. see below The Resolver factory takes in the liveService and returns all of the lives. The resolve.lives config takes in the Resolver factory and executes it. The results will be assigned to the homeController's last parameter as lives.

class Resolver extends Factory
  constructor: (liveService) ->
    return liveService.getAll()

class Routes extends Config
  constructor: ($routeProvider) ->
    $routeProvider.when '/home',
      templateUrl: 'template.html'
      controller: 'homeController'
      resolve:
        lives: ['Resolver', (resolve) -> resolve()]

class Home extends Controller
  constructor: ($scope, $state, Faye, authenticationService, lives) ->
    # other code

which is equivalent to:

class Resolver
  constructor: (liveService) ->
    return liveService.getAll()

class Routes
  constructor: ($routeProvider) ->
    $routeProvider.when '/home',
      templateUrl: 'template.html'
      controller: 'homeController'
      resolve:
        lives: ['Resolver', (resolve) -> resolve()]

class Home
  constructor: ($scope, $state, Faye, authenticationService, lives) ->
    # other code

angular.module('app')
.factory('Resolver', ['liveService', Resolver])
.config(['$routeProvider', Routes])
.controller('homeController', ['$scope', '$state', 'Faye', 'authenticationService', 'lives', Home])

Please let me know if this helps. I follow this pattern myself.

Thanks, Cary

CaryLandholt avatar Mar 26 '15 03:03 CaryLandholt

Angular will resolve lives properly.

CaryLandholt avatar Mar 26 '15 03:03 CaryLandholt

Thank you very much! i will try this later, if it works.. can i have your permission to make a blog post? im still building my personal blog.

Greets!

2015-03-26 0:12 GMT-03:00 Cary Landholt [email protected]:

Try using a factory to represent the lives resolve function. see below The Resolver factory takes in the liveService and returns all of the lives . The resolve.lives config takes in the Resolver factory and executes it. The results will be assigned to the homeController's last parameter as lives.

class Resolver extends Factory constructor: (liveService) -> return liveService.getAll() class Routes extends Config constructor: ($routeProvider) -> $routeProvider.when '/home', templateUrl: 'template.html' controller: 'homeController' resolve: lives: ['Resolver', (resolve) -> resolve()] class Home extends Controller constructor: ($scope, $state, Faye, authenticationService, lives) -> # other code

which is equivalent to:

class Resolver constructor: (liveService) -> return liveService.getAll() class Routes constructor: ($routeProvider) -> $routeProvider.when '/home', templateUrl: 'template.html' controller: 'homeController' resolve: lives: ['Resolver', (resolve) -> resolve()] class Home constructor: ($scope, $state, Faye, authenticationService, lives) -> # other code

angular.module('app') .factory('Resolver', ['liveService', Resolver]) .config(['$routeProvider', Routes]) .controller('homeController', ['$scope', '$state', 'Faye', 'authenticationService', 'lives', Home])

Please let me know if this helps. I follow this pattern myself.

Thanks, Cary

— Reply to this email directly or view it on GitHub https://github.com/CaryLandholt/ng-classify/issues/34#issuecomment-86319915 .

nahue avatar Mar 26 '15 18:03 nahue

Of course

On Thu, Mar 26, 2015 at 1:37 PM, Victor Nahuel Chaves [email protected] wrote:

Thank you very much! i will try this later, if it works.. can i have your permission to make a blog post? im still building my personal blog. Greets! 2015-03-26 0:12 GMT-03:00 Cary Landholt [email protected]:

Try using a factory to represent the lives resolve function. see below The Resolver factory takes in the liveService and returns all of the lives . The resolve.lives config takes in the Resolver factory and executes it. The results will be assigned to the homeController's last parameter as lives.

class Resolver extends Factory constructor: (liveService) -> return liveService.getAll() class Routes extends Config constructor: ($routeProvider) -> $routeProvider.when '/home', templateUrl: 'template.html' controller: 'homeController' resolve: lives: ['Resolver', (resolve) -> resolve()] class Home extends Controller constructor: ($scope, $state, Faye, authenticationService, lives) -> # other code

which is equivalent to:

class Resolver constructor: (liveService) -> return liveService.getAll() class Routes constructor: ($routeProvider) -> $routeProvider.when '/home', templateUrl: 'template.html' controller: 'homeController' resolve: lives: ['Resolver', (resolve) -> resolve()] class Home constructor: ($scope, $state, Faye, authenticationService, lives) -> # other code

angular.module('app') .factory('Resolver', ['liveService', Resolver]) .config(['$routeProvider', Routes]) .controller('homeController', ['$scope', '$state', 'Faye', 'authenticationService', 'lives', Home])

Please let me know if this helps. I follow this pattern myself.

Thanks, Cary

— Reply to this email directly or view it on GitHub https://github.com/CaryLandholt/ng-classify/issues/34#issuecomment-86319915 .


Reply to this email directly or view it on GitHub: https://github.com/CaryLandholt/ng-classify/issues/34#issuecomment-86661943

CaryLandholt avatar Mar 26 '15 19:03 CaryLandholt

im sorry but i'm having troubles with annotations .. im including ng-classify in linemanjs.. you script annotates dependencies?

nahue avatar Mar 27 '15 02:03 nahue

if i leave the annotation of the "lives" parameter.. the app fails.. but if i remove only the annotation it works.. is there a way to get it working? dont know if removing the annotation is safe for minification

nahue avatar Mar 27 '15 02:03 nahue

Can you share your repo? I'll take a look.

On Mar 26, 2015, at 21:57, Victor Nahuel Chaves [email protected] wrote:

if i leave the annotation of the "lives" parameter.. the app fails.. but if i remove only the annotation it works.. is there a way to get it working? dont know if removing the annotation is safe for minification

— Reply to this email directly or view it on GitHub.

CaryLandholt avatar Mar 27 '15 02:03 CaryLandholt

Sadly our repo is private.. but ill share some gists so you can see whats going on:

https://gist.github.com/nahue/2e03b12f909629006c79 is the resolver.. router and controller

https://gist.github.com/nahue/ba2767bfc4302731a77a is the controller result

https://gist.github.com/nahue/79314c5f7a807009d87c is the javascript result of the controller

if remove the "lives" annotation on the last file.. the app works

nahue avatar Mar 27 '15 03:03 nahue

My gosh, @nahue! My sincere apologies for the extreme delay in replying to your question. I've been focusing on my day job, a startup.

I just realized that I've tested using the angular router; however, ui-router supports resolve in the same way (https://github.com/angular-ui/ui-router/wiki#resolve).

I'm sure you've moved on, but if you haven't, we can setup a screenshare to work through it.

Again, my apologies for the unforgivable delay. :(

Thanks, Cary

CaryLandholt avatar Aug 11 '15 03:08 CaryLandholt