I asked a related question earlier today on stackoverflow but due to both the complexity of the code (not being able to post it) and my own noviceness I wasn't able to really implement a solution from the answers given.
So my question now is, for a code such as:
$http.get(ArbitraryInput).then(function (response) {$scope.data = response});
(you can substitute "then" with "success" above, I use "then" because success is deprecated according to the updated $http api)
How do I actually save the response object in $scope.data? From what I've been doing so far, $scope.data
is "undefined" when I later typed in the code:
console.log($scope.data3);
Thanks!
UPDATE ONE
Apparently if I put console.log($scope.data);
inside the console will display what I want for $scope.data
. But if it is outside, it will remain "undefined" in the console. In other words:
$http.get(ArbitraryInput).then(function (response) {$scope.data = response; console.log($scope.data);});
will return whatever sort of object response was. in the console, but
$http.get(ArbitraryInput).then(function (response) {$scope.data = response;});
console.log($scope.data);
will return "undefined" in the console.
Question has been answered, but want to give an alternate solution in case the data is needed immediately. Instead of calling the $http service directly in your controller/directive, you can resolve that data as a dependency in your route, so the data is immediately availble:
Then your controller can look like this:
And in your view:
Would display all of your data as JSON without having to call $http in your controller.
Please note that this is a promise (async request) so if you did something like this
it might log nothing ,, as you try to log it before the request is finished so you might need to use something like this
so you are sure that console.log will be executed after the assignment to $scope.data
Here is a practical answer, courtesy of user Kirill Slatin. Practical use example at the bottom of the answer.
If, like me, you need to use that response object as a scope variable, here's the trick:
This will return "undefined" in the console, and like me, you probably won't be able to use that response data on your page:
However, this should work:
$scope.$apply()
is what will persist the response object so you can use that data.-
Why would you need to do this?
I'd been trying to create an "edit" page for my recipes app. I needed to populate my form with the selected recipe's data. After making my GET request, and passing the response data to the $scope.form, I got nothing...
$scope.$apply()
and Kirill Slatin helped big time. Cheers mate!Here's the example from my editRecipeController:
Hope that helps!
You need to leverage the fact that $http.get returns a promise, and chain to that promise in any code that needs to access the resolved data:
Try this:
$http.get is asynchronous. See also this explanation of AJAX