Miguel Moura
Miguel Moura

Reputation: 39384

Get property of JSON

I have the following on an angular controller:

$scope.emailsConfig = {
  valueField: 'email',
  labelField: 'name',
  options: [{email: '[email protected]', name: 'Brian'},
            {email: '[email protected]', name: 'Nikola'}],
}

Then I have the following:

<select selectize="emailsConfig" ng-model="emails"></select>

This works fine ... But then I changed options to:

options: UserService.GetEmails()

This does not work. When I logged options and get:

{"Emails":[{email: '[email protected]', name: 'Brian'}, {email: '[email protected]', name: 'Nikola'}]}

How can I get the values that are in Emails?

I tried UserService.GetEmails().Emails but somehow get undefined

UPDATE

UserService.GetEmails() is the following:

application.service('UserService', function ($http) {

  return {
    GetEmails: function () {
      return $http.get('api/users/emails');
    }
  }
}

Upvotes: 0

Views: 106

Answers (1)

charlietfl
charlietfl

Reputation: 171669

The service is returning the promise that $http returns. You still need to add the callback that returns the data. Can use success() or then()

Try this:

UserService.GetEmails().success(function(resp){    
    $scope.emailsConfig = {
      valueField: 'email',
      labelField: 'name',
      options: resp.Emails
    }

}).error(function(){
   alert('Ooops')
});

to move more of this into the service and out of the controller you could do something like:

application.service('UserService', function ($http) {
    return {
        GetEmails: function (callback) {
            $http.get('api/users/emails').success(function (resp) {
                var config = {
                    valueField: 'email',
                    labelField: 'name',
                    options: resp.Emails
                }
                callback(config);

            }).error(function () {
                alert('Oooops');
            });
        }
    }
}

then in controller

UserService.GetEmails(function(emailsConfig){
    $scope.emailsConfig = emailsConfig;
})

Upvotes: 1

Related Questions