2016-05-25 8 views
0

私は角度に新しいです、誰も私の角度のコントローラの中に返されたスプリングのマップ値を取得する方法を教えてくれますか? は、ここに私のコードスニペットです:Angular JS - 角度コントローラ内のスプリングがマップ値を返す方法を教えてください。

がapp.js

// Service ----------------------------------------------------------------- 
myApp.service('FolderService', function ($log, $resource, $http) { 
    return { 
     onlineView: function(docId) { 
      var viwerResource = $resource('processOnlineView', {}, { 
       get: {method: 'POST', params: {'docId' : docId}} 
      }); 
      return viwerResource.get(); 
     }  
    } 
}) 

// Controller ----------------------------------------------------------------- 
.controller('FolderController', function ($scope, $log, FolderService) {   
    //click online view   
    $scope.view = function(doc) { 
     var rtnMap = FolderService.onlineView(doc.cmObjectId); 
     console.log('rtnMap: ' + rtnMap); 
     // it shows rtnMap: [object Object] 
     var key = 'response'; 
     var value = rtnMap[key]; 
     console.log('value: ' + value); 
     // I want to get map value, but it shows undefined 
     // I except get "d:/tomcat/bin/hello.swf" here 
     $scope.rtnFileName = rtnMap; 
    }   
}); 

私の春のコントローラーのJavaコード

@RequestMapping(value = "/processOnlineView", method = RequestMethod.POST) 
public @ResponseBody Map<String, String> processOnlineView(@RequestParam(value = "docId") String docId) { 
    String resultDocName = ""; 
    try { 
     // get File by docId 
     File file = queryFile(docId);  

     // set resultDocName value 
     resultDocName = file.getAbsolutePath(); // real file path, like: d:/tomcat/bin/hello.swf 
    } catch (Exception e) { 
     e.printStackTrace(); 
     } 
    return Collections.singletonMap("response", resultDocName); 
    }  

クロムログ:私はしてHTMLで値を期待得ることができます chorme log

これを使用:

rtnFileName: {{rtnFileName.response}}

HTMLショー:

rtnFileName: d:/tomcat/bin/hello.swf 

しかし、どのように直接的な角度コントローラのマップ値を取得するには? 何か提案がありがとうございます。

+0

これを元に戻すことを教えてください。 FolderService.onlineView(doc.cmObjectId)。私。あなたはどんな反応を得ていますか?ジュソン?私たちはあなたがhtmlで何を見ているのかを、{{rtnFileName.response}} – wdanda

+0

を呼び出してonlineView()を呼び出した後、json formate map [オブジェクトオブジェクト]を返します。ありがとう! – Han

+0

私は何をしようとしているのか分かりません。あなたのサービス "/ processOnlineView"は、実際のリスト/マップではなく、単一のエントリ(つまり、 'd:/tomcat/bin/hello.swf')を返すようです...実際のサービスコールから戻ってくるものを共有できますか?あなたはGoogle Chromeのネットワークタブでこれを見つけることができます。 – wdanda

答えて

0

サービスを利用してください。たとえば:

var app = angular.module('myApp', []) 
app.service('sharedProperties', function() { 
    var mapCoord= 'Test'; 

    return { 
     getProperty: function() { 
      return mapCoord; 
     }, 
     setProperty: function(value) { 
      mapCoord= value; 
     } 
    }; 
}); 

自分のメインコントローラ

app.controller('Main', function($scope, sharedProperties) { 
    $scope.mapCoord= sharedProperties.setProperty("Main"); 
}); 

インサイドあなたの地図コントローラ内部

app.controller('Map', function($scope, sharedProperties) { 
    $scope.mapCoord= sharedProperties.getProperty(); 
}); 
+0

返信いただきありがとうございますが、私は春のコール直後にマップの値を取得する必要があります、とにかく感謝:) – Han

0

問題は解決しました。 $ HTTPポストが非同期呼び出しであるため、

  onlineView: function(docId) { 
       $http({ 
        method: 'POST', 
        url: urlBase + '/processOnlineView', 
        params: { 
         docId: docId 
        } 
       }) 
       .success(function(data, status, headers, config) { 
        console.log('success data: ' + data); // result: success data: [object Object]       
        for (key in data){ 
         console.log('>> data key: ' + key);   
         console.log('>> data value: ' + data[key]); 
        }    
        var resultDocName = data['response'];  
        console.log('resultDocName: ' + resultDocName);   
        runFlexpaper(resultDocName); 
       }) 
       .error(function(data, status, headers, config) { 

       });        
     } 

第二に、「成功」ブロック内で返されたマップを検索: まず、代わりに$リソースのポストは$ HTTPを使用しています。

関連する問題