ui-router has two ways to deal with routing before a transition occurs. One
is hooking $stateChangeStart, and the other is putting some interesting
code into the route's resolve: block. If you're intent on capturing a state
transition before you actually complete the transition, the best way to go
is attach to $stateChangeStart, figure out where to actually go, do a
$state.go on that new state, and an event.preventDefault() on the place you
were heading.


On Mon, Aug 4, 2014 at 11:36 AM, bastienneJS <[email protected]>
wrote:

> Hello Eric,
>
> about 1)
> I guess there is a grammer it should be dateplanner/week without the
> trailing slash.
>
> about 2)
> So you would create extra states for the week/firstDayOfWeek and day/today
> routes?
>
> Would it make sense to you to execute a state.go('state', routeData); in
> the planner/day and planner/week state to the week/firstDayOfWeek and
> day/today state so I use both 'pre-states' and their controller / resolve
> property to do the state.go there to the real state with the full url?
>
> could that work?
>
> about 3) emberJS has the feature I want!
> http://emberjs.com/guides/routing/redirection/#toc_before-the-model-is-known
>
> Its a hook called beforeModel something I would need for angularjs... I do
> not want to learn that 1,6 MB monster and everyone goes with angular ;-)
>
>
>
>
>
> On Sunday, August 3, 2014 11:13:19 PM UTC+2, Eric Eslinger wrote:
>
>> Couple things:
>>
>> 1) There's definitely weirdness when dealing with trailing-slash URLs.
>> dateplanner/week/ would be routed by ui-router to anything like
>> dateplanner/week/:id instead of dateplanner/week, and I've run into issues
>> with stuff like that. In routes that end in a :id that I mean to route to
>> backend stuff, I tend to do validations on $stateParams (is a number, etc),
>> mainly because users who type in the wrong stuff direct to the URL bar or
>> click on a badly-formed link should get a gentle "hey, watch out" page with
>> help and bug-report links rather than a page that's misformed because I'm
>> trying to load profiles/NaN off my back end REST server.
>>
>> 2) I'd consider making a week/current and day/today route. If you put
>> them in there (I think earlier than the wildcard'd routes, I don't actually
>> know how ui-router handles fall-throughs and route matching rules), you can
>> just use special-case controllers for current and today.
>>
>> I do something similar to (2) with user-profile stuff. So /profiles/123
>> goes to profiles number 123, but the controller on /profiles/me just says
>> something _like_:
>>
>> function profilesMeController($scope, $state) {
>>   $state.go("profiles.detail({profileId: "+$scope.currentUser.
>> profileId+"})");
>> }
>>
>> Which will redirect to the appropriate profiles/:id route. You could do
>> something similar - in the today controller, calculate the appropriate
>> params and issue a $state.go.
>>
>> You could probably attach this behavior to dateplanner/week directly
>> instead of defining it as abstract.
>>
>> Orrr, you could do a $rootScope.$on('$stateChangeStart'), and cancel a
>> state change to your today routes and re-emit the same thing on as I
>> suggested above. I'm not wild about this approach personally, mainly
>> because I like to have all the calls that would influence routing decisions
>> made in the appropriate config block, instead of attached to $rootScope
>> with listeners.
>>
>> Hope this helps
>>
>> e
>>
>>
>> On Sun, Aug 3, 2014 at 1:38 PM, bastienneJS <[email protected]> wrote:
>>
>>> I have searched this forum, google and Stackoverflow, built sites with
>>> angularjs, github etc...
>>>
>>> There are no samples or helpful material to fullfil my requirements.
>>>
>>> That is my plunker: http://plnkr.co/edit/GMfMcXgHguYjFYoxWEaM?p=preview
>>>
>>> I like angularJS so far but the 'ui router' module seems really a
>>> limitation for what I need or I do it totally wrong.
>>>
>>> If you look at the plunker there is a planner button with 3 views
>>> day/week/month.
>>>
>>> For all 3 states day/week/month I would like to have these 3 url`s in
>>> the browser url bar e.g.:
>>>
>>> /#/projects/1/dateplanner/day/"CurrentDate"
>>> /#/projects/2/dateplanner/week/"FirstDayOfWeek"
>>> /#/projects/3/dateplanner/month/7
>>>
>>> At the moment I have "hacked" the day url but there are still many "day
>>> state" scenarios where the passed current date gets lost from the url e.g.
>>>
>>> - switching between "date planner" and "document browser" button the url
>>> is then /#/projects/43/dateplanner/day/-- (current date is missing)
>>>   even worse is that my day "hack" has introduced a bad behavior that is
>>> the day controller shows the alert('daily') TWO times ?!
>>> - Manipulating the day states date in the url bar , I am still unsure
>>> wether I should go in direction stateChangeStart on rootscope
>>> - When I switch from the week/month state away by pressing the day
>>> button there is again the current date missing in the
>>> url #/projects/43/dateplanner/day/--
>>>
>>> The same bugs are in the week/month state where I get only these urls:
>>>
>>> /#/projects/2/dateplanner/week/
>>> /#/projects/3/dateplanner/month
>>>
>>> That means there are at least 3 cases where the url can get wrong for
>>> all 3 states.
>>>
>>> All the ui router samples I have found are super simple... have as
>>> always nothing to do with real life requirements so I ask you guys here on
>>> the forum.
>>>
>>> 1.) What is the recommended approach to get the 3 cases done correctly
>>> with the ui-router?
>>> 2.) Is there any hook mechanism that allows my to write my
>>> FirstDayOfWeek, month number etc... into the $state/$stateparams before the
>>> state is activated/accepted because all parameters in the url match to a
>>> state?
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>  --
>>> 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/d/optout.
>>>
>>
>>  --
> 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/d/optout.
>

-- 
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/d/optout.

Reply via email to