Hi Kevin, Thanks for your reply but it makes no difference for me.
Any other ideas? I did wonder about assigning the data to a property on the $rootScope and then assigning that to $scope.locations in my controller, but surely using the property of the service injected in my controller would work? Clearly it's not! Rob On Thursday, 18 December 2014 15:57:20 UTC, Kevin Shay wrote: > > What happens if you initialize lastReportedEvents to an empty array > instead of null? > > Kevin > > On Thu, Dec 18, 2014 at 9:22 AM, Rob Parker <[email protected] > <javascript:>> wrote: >> >> Hi, >> >> I have not long started out using AngularJS, and I am having a problem >> getting some data returned in a $http request on a service I have written >> to be used on a $scope property defined in one my controllers. >> >> My service looks like so: >> >> app.factory('DataStoreService', function ($rootScope, $location, $http) { >> var lastReportedEvents = null; >> //For our inital request to server, but for subsequent requests we >> should use the nextURL >> //property of the previous successful response >> var locationStoreURL = '/location/GetLastReportedEvents.json'; >> >> return { >> >> lastReportedEvents: lastReportedEvents, >> getLastReportedEvents: function () { >> $http.get(locationStoreURL) >> .success(function (data, status, headers, config) { >> >> if (data.success) { >> lastReportedEvents = angular.fromJson(data).data; >> >> //TO-DO, use the nextURL property on the JSON >> response and set locationStoreURL var in this service >> >> } >> else { >> console.log('getLocationData ERROR!'); >> } >> }) >> .error(function (data, status, headers, config) { >> console.log('getLocationData ERROR!'); >> }); >> >> } >> >> >> }; >> }); >> >> >> When the user logs in to the application I am making the request for data >> in the app run block like so. >> >> app.run(['$rootScope', '$location', 'DataStoreService', function >> ($rootScope, $location, DataStoreService) { >> >> >> $rootScope.$on('login', function (event) { >> //console.log('login event detected'); >> DataStoreService.getLastReportedEvents(); >> }); >> >> }]); >> >> >> In my controller I have: >> >> app.controller('LocationsController', ['$rootScope', '$scope', >> 'DataStoreService', function ($rootScope, $scope, DataStoreService) { >> >> $scope.locations = DataStoreService.lastReportedEvents; >> }]); >> >> >> So as you can see, I'm just trying to assign a property of my service >> that represents the data returned from the $http request to the $scope on >> my controller that my view is bound to: >> >> <div ng-controller="LocationsController"> >> >> <table class="table table-hover table-condensed"> >> <tr ng-repeat="location in locations"> >> <td> >> <span>{{location.UnitName}}</span> >> <p>{{location.Location}}</p> >> </td> >> </tr> >> </table ></div> >> >> Nothing appears in my view. I can get it to work by emitting an event in >> the success handler of my request and then assigning to the $scope in my >> controller in an event listener, but this seems a bit backwards to me. I >> thought by injecting a service to a controller, that any changes to the >> service (properties, etc) are broadcast to any controllers using that >> service, or am I mistaken. >> >> I must be missing something fundamental here! >> >> Thanks >> >> -- >> 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] <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.
