One more thing to try... initialize lastReportedEvents = [], and then when you get the data, instead of setting the variable:
lastReportedEvents.push.apply(lastReportedEvents, angular.fromJson(data).data); Kevin On Thu, Dec 18, 2014 at 11:37 AM, Rob Parker <[email protected]> wrote: > > 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]> >> 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]. >>> 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.
