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

私のHTMLコードでは、上記のリンクをクリックすると、モーダルポップアップが開きます。このモーダルポップアップは、それ自身のコントローラーに関連付けられています。 このリンクが呼び出されると、httpリクエストで取得した値を渡す必要があります。これは私のコントローラーの様子です。このcontroolerでangularJS-変数から値を得ることができない

(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()); 
      }); 
     }; 

    }); 
})(); 

、これは私が変数IDに割り当てるしようとしている値を返すサービスで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として結果を返している:私はこれがあなたのために働くために起こっているかどうかわからないですが、あなたがこの

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

未定義のエラー?それがmyid = response.idにある場合は、その行のサービスコール – Thangadurai

+0

はいを​​確認する必要があります。サービスは正常に動作しています。 {"id": "5"、 "name": "John"} – Annabelle

+0

サービスは正常です。私はそれを二重にチェックした。 @ Thangadurai – Annabelle

答えて

1

私は代わりに考える:

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

あなたが持っている可能性があり:あなたのmodal controller

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

し、後で使用id = response.idにします。

または、別の方法として、独自の遅延オブジェクトを作成し、http.then内でそれを解決し、関数からdefer.promiseを返すことができます(@elasticrashのように)。

0

ような何かを試みることができる

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

次を使用する必要がありますので、実際の応答データは、response.dataである:

myid = response.data.id 

いくつかのより明確化: を応答オブジェクトは、レスポンスヘッダ、ステータスコード、ステータステキストと設定が含まれています。データは応答の一部に過ぎません。そのため、response.dataを使用して実際の応答データを取得する必要があります。 response.statusにはHTTP応答コードが含まれ、元のHTTP要求ヘッダーなどのresponse.config.headersが含まれます。

ただ、console.log(レスポンス)を実行すれば、レスポンスオブジェクトにデータがどのように構造化されているかがわかります。

関連する問題