Why would you need to add resolve to every controller? The solution described by me works pretty well, and I have never add any resolve to controllers...
2014-01-27 Cameron MacKenzie <[email protected]>: > Is there still no good solution for this? > > It'd be really nice if all of the dependencies could be resolved in run() > before the rest of the application executes. As it stands, you have to add a > resolve to EVERY controller for the dependencies you need. That seems like a > maintenance pain in the butt. Is there any other solution? > > > On Friday, September 27, 2013 3:03:56 AM UTC-4, Witold Szczerba wrote: >> >> So your case is the same as my. Promises work for me very well in this >> scenario. Directives work very well with them as well. >> Rember that you cam make entire app invisible or hidden behind some fancy >> "please wait" banner until every crucial data arrives (look at the API, you >> can resolve multiple promises in one go), so there is no need to worry how >> does your directives looks like when data is not yet available. >> >> Regards, >> Witold Szczerba >> --- >> Sent from my mobile phone. >> >> On Sep 27, 2013 5:00 AM, "Tim Hardy" <[email protected]> wrote: >>> >>> FeatureToggles. Is a feature turned on or off? If it's off, then >>> nothing related to it should be shown - buttons, tabs, grids, anything. >>> Directives are an elegant way to hangle this, just place a >>> data-feature="SomeFancyFeature" on related elements. >>> >>> Callbacks don't work well with directives. Directives don't wait. They >>> bind, and if the data they need isn't available when they bind, then you >>> have to make a choice. Do you show the element and hide it later? Do you >>> hide it and show it later? It's so much easier to simply accept that in >>> scenarios, there really is data that is so important that some things need >>> to wait for it. It's simply not worth it to let the controller and view >>> partially "do" anything. >>> >>> On Thursday, September 26, 2013 4:04:48 PM UTC-5, Witold Szczerba wrote: >>>> >>>> What is your use case for this? >>>> I had similar problem, I mean, back then I though I had, with my >>>> authorization system. >>>> I had to fetch data from server to be able to figure out what is the >>>> user allowed to see, like what options in menu and what actions were >>>> possible to they. >>>> >>>> The solution was to back everything with promises. Promises are very >>>> nice, they let you do things at once and there is no need to wait for a >>>> service to return data before the consumers of the service run. >>>> >>>> So, the service triggers the http request and immediately return >>>> promise. If your controllers need the response, they ask the promise to >>>> resolve with callback. There is no need for the controllers to actually be >>>> postponed. They will initialize, use the promise returned by the service >>>> and >>>> once the data are available - they continue. >>>> If the data is available before controller was initialized, the promise >>>> will trigger callback immediately. If not, the callbacks will wait. It >>>> worked for me. >>>> >>>> Regards, >>>> Witold Szczerba >>>> --- >>>> Sent from my mobile phone. >>>> >>>> On Dec 24, 2012 1:37 PM, "Sergey Chico" <[email protected]> wrote: >>>>> >>>>> I don't think jsfiddle or plunkr will be useful. I need something like >>>>> app.run(['$rootScope', '$http', function($rootScope, $http) { >>>>> $http.get('some/url').success(function (data) { >>>>> // make the rest of application init (e.g. controllers can >>>>> use the success function data) >>>>> // for example >>>>> >>>>> $rootScope.veryImportantDataApplicationNeedsOrElseItMustNotInit = data; >>>>> // then make controllers init so they can use >>>>> $rootScope.veryImportantDataApplicationNeedsOrElseItMustNotInit.someProperty >>>>> }); >>>>> }]); >>>>> >>>>> Now I write code this way: >>>>> routeProvider.when('/path1, { >>>>> templateUrl: '/partials/path1.html', >>>>> controller: 'path1Controller', >>>>> resolve: // includes function returning $http promise with >>>>> veryImportantDataApplicationNeedsOrElseItMustNotInit >>>>> }); >>>>> routeProvider.when('/path2, { >>>>> templateUrl: '/partials/path2.html', >>>>> controller: 'path2Controller', >>>>> resolve: // includes function returning $http promise with >>>>> veryImportantDataApplicationNeedsOrElseItMustNotInit >>>>> }); >>>>> ............................. >>>>> ............................. >>>>> routeProvider.when('/path1000000000000, { >>>>> templateUrl: '/partials/path1000000000000.html', >>>>> controller: 'path1000000000000Controller', >>>>> resolve: // includes function returning $http promise with >>>>> veryImportantDataApplicationNeedsOrElseItMustNotInit >>>>> }); >>>>> ...and there are 2 problems: >>>>> 1. I repeat myself every of 1000000000000 paths for routeProvider >>>>> 2. Controllers which are directly in index.html (using ng-controller) >>>>> still can not use someProperty of >>>>> veryImportantDataApplicationNeedsOrElseItMustNotInit or I need to place >>>>> promise.then(...) into them >>>>> So that looks VERY ugly and I just want to know is there any other ways >>>>> to preload the data for my application. >>>>> >>>>> >>>>> понедельник, 24 декабря 2012 г., 15:57:30 UTC+4 пользователь Pawel >>>>> Kozlowski написал: >>>>>> >>>>>> Use the .run() block of a module. >>>>>> Send a jsfiddle or plunk if you need help wit the code. >>>>>> >>>>>> Cheers, >>>>>> Pawel >>>>>> >>>>>> On Monday, December 24, 2012, Sergey Chico wrote: >>>>>>> >>>>>>> I need to load some data from server before all controllers init. Now >>>>>>> I use the resolve of $routeProvider. But this way I need to include my >>>>>>> resolve function returning promise into every resolve for every route. >>>>>>> This >>>>>>> looks not DRY-way. Any thoughts? >>>>>>> >>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "AngularJS" group. >>>>>>> To post to this group, send email to [email protected]. >>>>>>> To unsubscribe from this group, send email to >>>>>>> [email protected]. >>>>>>> Visit this group at http://groups.google.com/group/angular?hl=en-US. >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Question? Send a fiddle >>>>>> (http://jsfiddle.net/pkozlowski_opensource/Q2NpJ/) or a plunk >>>>>> (http://plnkr.co/) >>>>>> Need help with jsFiddle? Check this: >>>>>> http://pkozlowskios.wordpress.com/2012/08/12/using-jsfiddle-with-angularjs/ >>>>>> >>>>>> Looking for UI widget library for AngularJS? Here you go: >>>>>> http://angular-ui.github.com/ >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "AngularJS" group. >>>>> To post to this group, send email to [email protected]. >>>>> To unsubscribe from this group, send email to >>>>> [email protected]. >>>>> Visit this group at http://groups.google.com/group/angular?hl=en-US. >>>>> >>>>> >>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "AngularJS" group. >>> To unsubscribe from this group and stop receiving emails from it, send an >>> email to [email protected]. >>> >>> To post to this group, send email to [email protected]. >>> Visit this group at http://groups.google.com/group/angular. >>> For more options, visit https://groups.google.com/groups/opt_out. > > -- > You received this message because you are subscribed to the Google Groups > "AngularJS" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/angular. > For more options, visit https://groups.google.com/groups/opt_out. -- You received this message because you are subscribed to the Google Groups "AngularJS" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/angular. For more options, visit https://groups.google.com/groups/opt_out.
