Hey Luke,
remember the way I had this set up MainController was on the body of the
"shell" page. When I am on the /client/:user_Id/account route it is mapped
to the clientController and it still doesnt register the $on event. The
only time I saw it hit is when I put a $timeout function around it and
delayed it for a second. Have an idea why?
I am trying to follow best practice by seperating things into their own
controllers but I might have to put it on the main controller. I am trying
to avoid doing that.
By the way are we allowed to communicate outside of the group? Maybe we can
exchange emails
On Monday, April 21, 2014 12:03:16 AM UTC-4, Luke Kende wrote:
>
> The problem is that a controller specified for a route template only
> exists in memory at the time of the route match. As soon as you leave and
> come back to a route/view, no state is maintained on the controller, the
> view runs the controller function all over again. This is probably why you
> are confused about ClientController not getting the $broadcast event... it
> must be the active route/view to be listening.
>
> You will have to store the user data in a service and inject it (or use
> rootScope or MainCtrl scope since those don't get removed). Hence, you
> are rebuilding your scope each time you load the route: /client/:user_id/
> account
>
> function clientController($scope, AuthFactory, DataService){
> $scope.userData = DataService.userData; //by putting object data on
> scope, any update to DataService.userData from other controller
> automatically binds to the service and therefor the loaded view template
> }
>
>
> On Sun, Apr 20, 2014 at 9:49 PM, Billy Figueroa
> <[email protected]<javascript:>
> > wrote:
>
>> I have not decided yet of how I am going to handle updating the user
>> status button to login or logout. Not sure what controller I want to put it
>> in yet so that is why you see multiple controllers with a "user.isLoggedIn"
>> attribute, so just ignore that.
>>
>> As far as why not grab the data from the auth service...
>>
>> This is my Auth service which should only handle login/ logout etc The
>> broadcasting is so I can put listeners on controllers who will then grab
>> data from my "userData" or "dataFactory". This service will grab all the
>> data I need from from the backend and then I can grab the data from both my
>> "client" and "provider" controllers.
>>
>> something like this inside the client controller
>>
>> $scope.$on('clientAuthenticated', function(phpData) {
>> $scope.clientData = userData.getData()
>> });
>>
>>
>>
>> On Sunday, April 20, 2014 11:02:00 PM UTC-4, Luke Kende wrote:
>>
>>> So, here's what I am understanding about your order of events, simplest
>>> scenario...
>>>
>>> 1. User comes to home page and is not logged in therefore sees Login
>>> form.
>>> 2. User enters credentials and clicks login, which let's say is
>>> successful, so factory method sets it's local isLoggedIn value to true and
>>> broadcasts the event.
>>> 3. At this point in time, the MainController and the LoginController
>>> are still active controllers on the page. MainController gets the
>>> broadcast (but not sure why, maybe to change the state of the menu
>>> navigation?). LoginController runs the promise.then() function which sets
>>> it's own state variable for isLoggedIn (but not sure why here either as the
>>> view is about to change), then redirects the angular route so the new view
>>> is loaded with the ClientController to show the account info.
>>>
>>> Why does the ClientController need the broadcast? To get the phpData?
>>> If this is true, I'd say put the object data on the factory instance and
>>> by injected it into the ClientController you will have access to the user's
>>> logged in data (or anywhere throughout the app).
>>>
>>> factory.user = {
>>> isLoggedIn : false,
>>> data: null
>>> };
>>>
>>> // in $http promise.then()
>>> if (phpData.account_type === 'client') {
>>> // $timeout(function() {
>>> broadcast('clientAuthenticated', phpData);
>>> factory.user.data = phpData;
>>> // }, 1000);
>>> return phpData;
>>> }
>>>
>>>
>>>
>>>
>>> On Sun, Apr 20, 2014 at 7:54 PM, Billy Figueroa <[email protected]>wrote:
>>>
>>>> FIY ignore the time functions. I was only using those to see if the
>>>> broadcast worked. This is not part of my original code
>>>>
>>>>
>>>> On Thursday, April 17, 2014 9:53:56 PM UTC-4, Billy Figueroa wrote:
>>>>>
>>>>> Hi All,
>>>>>
>>>>> so I have a quick issue with my controller ordering I guess.
>>>>>
>>>>> I have the following shell page layout...
>>>>>
>>>>> <html>
>>>>> <head></head>
>>>>> <body ng-controller="MainController">
>>>>> <div ng-view></div>
>>>>> </body>
>>>>> </html>
>>>>>
>>>>> I have an ng-view template that the routeProvider is loading
>>>>> (account.php) when we hit the url and load ClientController...
>>>>>
>>>>> .when('/client/:user_id/account', {
>>>>> templateUrl: '../MINT/views/account.php',
>>>>> controller: 'ClientController',
>>>>> restrict: true
>>>>> })
>>>>>
>>>>> I also have an AuthFacotory factory where, once a user logs in and I
>>>>> get data back from my backend (PHP) I broadcast a signal to say we are
>>>>> authenticated
>>>>>
>>>>> if (phpData.account_type === 'client')
>>>>> $rootScope.$broadcast('clientAuthenticated',
>>>>> phpData);
>>>>> else
>>>>> $rootScope.$broadcast('providerAuthenticated',
>>>>> phpData);
>>>>>
>>>>> I have the following I guess "watches" both inside the MainController
>>>>> and ClientController
>>>>>
>>>>>
>>>>> <-- MainController -->
>>>>> $scope.$on('clientAuthenticated', function(phpData) {
>>>>> console.log("We caught the broadcast for clientAuthenticated[
>>>>> MainController]");
>>>>> });
>>>>>
>>>>> <-- ClientController -->
>>>>> $scope.$on('clientAuthenticated', function(phpData) {
>>>>> console.log("We caught the broadcast for clientAuthenticated[
>>>>> ClientController]");
>>>>> });
>>>>>
>>>>>
>>>>> I am only "catching" the one in the MainController.
>>>>>
>>>>> Based on the structure being that the ClientController is loaded as
>>>>> part of the view, I m guessing its some sort of a child of the
>>>>> MainController but why is it not "catching" that broadcast?
>>>>>
>>>>> the weird part is that I have other code in the ClientController and
>>>>> that gets executed but the console.log inside the scope statement is not
>>>>>
>>>>> I wanted to create a jsfiddle or plunker but I rarely get them working
>>>>> when I try to do it in a non global modular way like real apps are
>>>>> written
>>>>> i.e. var myApp = angular.module('myApp', [])
>>>>>
>>>> --
>>>> You received this message because you are subscribed to a topic in the
>>>> Google Groups "AngularJS" group.
>>>> To unsubscribe from this topic, visit https://groups.google.com/d/
>>>> topic/angular/NaBscLyPqhY/unsubscribe.
>>>> To unsubscribe from this group and all its topics, 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 a topic in the
>> Google Groups "AngularJS" group.
>> To unsubscribe from this topic, visit
>> https://groups.google.com/d/topic/angular/NaBscLyPqhY/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to
>> [email protected] <javascript:>.
>> To post to this group, send email to [email protected]<javascript:>
>> .
>> 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.