2016-06-16 4 views
1
<a class="clickme" ng-click="vm.open()" >Click ME</a> 

В моем HTML-коде у меня есть ссылка, как указано выше, нажатие которой открывает модальное всплывающее окно. Это модальное всплывающее окно связано с собственным контроллером. Итак, когда это связано, я должен передать значение, которое я получаю с помощью HTTP-запроса. Так выглядит мой контроллер;angularJS- невозможно получить значение для переменной с http

(function() { 

angular 
    .module('myApp.abc', []) 

    .factory('myService', function($http) { 
    }) 

    .controller('MyController', function($routeParams, myService, $scope, $uibModal,$http) { 
     var vm = this; 

     vm.open = function() { 
      var modalInstance = $uibModal.open({ 
       animation: $scope.animationsEnabled, 
       templateUrl: 'path to modal popup', 
       controller: 'modalPopController', 
       resolve: { 
        id: function() 
        { 
         var myid; 
         var baseUrl = 'services/'; 
         $http.get(baseUrl+ 'get_user_session') 
         .then(function(response) { 
          myid = response.id; 
          return myid; 
         }); 
        } 
       } 
      }); 

      modalInstance.result.then(function (myCroppedImage) { 
       vm.member.avatar = myCroppedImage; 
      }, function() { 
       $log.info('Modal dismissed at: ' + new Date()); 
      }); 
     }; 

    }); 
})(); 

В этом controoler, это та часть, где я communicationg с сервисом, который возвращает значение, которое я пытаюсь присвоить идентификатор переменной. Это код:

var modalInstance = $uibModal.open({ 
       animation: $scope.animationsEnabled, 
       templateUrl: 'path to modal popup', 
       controller: 'modalPopController', 
       resolve: { 
        id: function() 
        { 
         var myid; 
         var baseUrl = 'services/'; 
         $http.get(baseUrl+ 'get_user_session') 
         .then(function(response) { 
          myid = response.id; 
          return myid; 
         }); 
        } 
       } 
      }); 

Но я получаю неопределенную ошибку. Что это?

UPDATE

Если я ставлю статическое значение, как это, она отлично работает.

resolve: { 
        id: function() { 
         return 5; 
        } 
       } 

Моя служба возвращает результат в формате JSON как это:

{"id":"5","name":"John"} 
+0

неопределенная ошибка, при которой линия? если он находится в myid = response.id, вам может потребоваться проверить ваш служебный вызов – Thangadurai

+0

Да в этой строке. Сервис работает нормально. Он возвращает JSON следующим образом: {"id": "5", "name": "John"} – Annabelle

+0

Сервис в порядке. Я дважды проверил его. @Thangadurai – Annabelle

ответ

1

Я не уверен, если это будет работать для вас, но вы могли бы попробовать что-то вроде этого

var modalInstance = $uibModal.open({ 
       animation: $scope.animationsEnabled, 
       templateUrl: 'path to modal popup', 
       controller: 'modalPopController', 
       resolve: { 
        id: function() 
        { 
         var myid; 
         var baseUrl = 'services/'; 
         var defer = $q.defer(); 
         $http.get(baseUrl+ 'get_user_session') 
         .then(function(response) { 
          myid = response.id; 
          defer.resolve(myid); 
         }); 
        return defer.promise; 
        } 
       } 
      }); 
0

Я думаю вместо:

id: function() 
        { 
         var myid; 
         var baseUrl = 'services/'; 
         $http.get(baseUrl+ 'get_user_session') 
         .then(function(response) { 
          myid = response.id; 
          return myid; 
         }); 
        } 

вы могли бы:

response: function() 
        { 
         var myid; 
         var baseUrl = 'services/'; 
         return $http.get(baseUrl+ 'get_user_session'); 
        } 

а затем по использованию id = response.id в вашем modal controller.

Или другим способом было бы создать свой собственный объект отсрочки и разрешить его внутри http.then и вернуть это defer.promise из функции (как показано @elasticrash).

0

Фактические данные отклика в response.data, так что вы должны использовать следующее:

myid = response.data.id 

Некоторые дополнительные разъяснения: Объект ответа содержит заголовки ответа, код состояния, текст статуса и конфигурации. Данные являются лишь частью ответа. Вот почему вы должны использовать response.data для получения фактических данных ответа. response.status содержит код ответа HTTP, а response.config.headers - исходные заголовки HTTP-запросов, например.

Просто выполните console.log (ответ), и вы увидите, как данные структурированы в объекте ответа.

Смежные вопросы