0

アプリケーションで googlemap を提供するモーダルでng-map ( http://ngmap.github.io/ ) を使用しましたが、そのディレクティブで例外が発生した後、フッターの閉じるボタンが機能しません。ディレクティブの前(ヘッダーなど)にその閉じるボタンを置くと、機能します!このような例外をキャッチして制御を維持するにはどうすればよいですか?

私のモーダルは次のとおりです。

 <script type="text/ng-template" id="views/OfficeMapModal.html">
        <div class="modal-header">
            <div class="modal-title">{{address}}</div>
        </div>
        <div class="modal-body">
            <ng-map zoom="15" center="{{center.latitude}}, {{center.longitude}}">
                <marker position="{{center.latitude}}, {{center.longitude}}"></marker>
            </ng-map>
        </div>
        <div class="modal-footer">
            <div class="btn btn-default select-again" data-ng-click="cancel()">close</div>
        </div>
 </script>

私のモーダルコントローラーは次のとおりです。

angular.module('portalApp').controller('GoogleMapModalController', ['$scope', 'NgMap', '$uibModalInstance', 'address', 'center', function ($scope, NgMap, $uibModalInstance, address, center) {
$scope.address = address;

$scope.center = center;

NgMap.getMap().then(function (map) {
    google.maps.event.trigger(map, 'resize');
    var myLatLng = new google.maps.LatLng(center.latitude, center.longitude);
    map.setCenter(myLatLng);
});

$scope.cancel = function () {
    $uibModalInstance.dismiss('cancel');
};}]);

編集:

エラー: Google が定義されていません t@ http://localhost:3000/bower_components/ngmap/build/scripts/ng-map.min.js:1:2423

4

1 に答える 1

0

メソッド getMap() を呼び出しているため、エラーを処理せずにそのメソッドのどこかで失敗した場合、実行は続行されません。これは、 $scope.cancel が宣言されないことを意味します。

このライブラリでエラーが予想される場合、または特に getMap() を呼び出すプロセスでエラーが予想される場合は、理想的にはこれらのエラーの解決を試みる必要があります。しかし、制御不能な条件のためにエラーを解決できない状況でキャンセル ボタンを機能させ続けるための最も簡単な解決策は、$scope.cancel 宣言を NgMap 初期化の上に移動し、呼び出しの周りに try catch を置き、エラーを出力することです。詳細:

    angular.module('portalApp').controller('GoogleMapModalController', ['$scope', 'NgMap', '$uibModalInstance', 'address', 'center', function ($scope, NgMap, $uibModalInstance, address, center) {
    $scope.address = address;

   $scope.center = center;

   $scope.cancel = function () {
        $uibModalInstance.dismiss('cancel');
    };

   try { // safely attempt to initialize 
      NgMap.getMap().then(function (map) {
         google.maps.event.trigger(map, 'resize');
         var myLatLng = new google.maps.LatLng(center.latitude, center.longitude);
         map.setCenter(myLatLng);
      });
   } catch(err) { } // out put error
   }]);
于 2016-02-23T11:25:32.917 に答える