2016-10-26 3 views
0

私のイオンアプリケーションでは、私は3番目のテンプレートフォルダに4ビューを作成した、私はgoogleマップ、 あり、私はインデックスページでマップIDと定義されたマップのAPIスクリプトを与えたが、それでも私のような問題が直面しています: - 読みプロパティ「をのfirstChild」ヌルのイオンアプリでは、3番目のビューにマップを表示する必要があります私はエラーを取得しています "nullのfirstChild 'を読み取る

を私はインデックスに同じマップdiv要素を追加していた場合ページ内に<body>または<ion-nav-bar>が問題なく動作しています。ここで

は、私が第三ビューで使用しているdiv要素です:

<div id="map" data-tap-disabled="true"></div> 

インデックスページで私のスクリプトは次のとおりです。 -

<script src="http://maps.googleapis.com/maps/api/js?key=AIzaSyCJPP8ZXFrsqzaApDmQE09W7DTYP2oiABw"></script> 

**私のマップ機能はコントローラです。 - **

$scope.mapFn=function(){ 

    google.maps.event.addDomListener(window, 'load', function() { 
     var myLatlng = new google.maps.LatLng(37.3000, -120.4833); 

     var mapOptions = { 
      center: myLatlng, 
      zoom: 16, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }; 

     var map = new google.maps.Map(document.getElementById("map"), mapOptions); 

     navigator.geolocation.getCurrentPosition(function(pos) { 
      map.setCenter(new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude)); 
      var myLocation = new google.maps.Marker({ 
       position: new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude), 
       map: map, 
       title: "My Location" 
      }); 
     }); 

     $scope.map = map; 
    });   
} 

答えて

1

ここで、イオンマップの実例を作った。その例では、HomeTabCtrlにGoogleマップを表示しています。下のリンクをご確認ください:

codepen.io

HTML

<html ng-app="ionicApp"> 

<head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"> 

    <title>Tabs Example</title> 

    <link href="https://cdnjs.cloudflare.com/ajax/libs/ionic/1.3.2/css/ionic.min.css" rel="stylesheet"> 
    <script src="https://maps.googleapis.com/maps/api/js?sensor=false&amp;libraries=places,geometry,drawing"></script> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/ionic/1.3.2/js/ionic.bundle.min.js"></script> 
    <style> 
    .editable-image { 
    height:200px; 
    text-align:center; 


} 
    #map { 
    height:200px; 
    width:600px; 
    } 
    </style> 
</head> 

<body> 

    <ion-nav-bar class="bar-positive"> 
    <ion-nav-back-button class="button-icon ion-arrow-left-c"> 
    </ion-nav-back-button> 
    </ion-nav-bar> 

    <ion-nav-view></ion-nav-view> 


    <script id="templates/tabs.html" type="text/ng-template"> 
    <ion-tabs class="tabs-icon-top tabs-positive"> 

     <ion-tab title="Map" icon="ion-home" href="#/tab/home"> 
     <ion-nav-view name="home-tab"></ion-nav-view> 
     </ion-tab> 

     <ion-tab title="About" icon="ion-ios-football" href="#/tab/about"> 
     <ion-nav-view name="about-tab"></ion-nav-view> 
     </ion-tab> 

     <ion-tab title="Contact" icon="ion-bag" ui-sref="tabs.contact"> 
     <ion-nav-view name="contact-tab"></ion-nav-view> 
     </ion-tab> 

     </ion-tab> 

    </ion-tabs> 
    </script> 

    <script id="templates/home.html" type="text/ng-template"> 
    <ion-view view-title="Home"> 
     <ion-content > 
     <h2>Google Map</h2> 
     <div id="map"></div> 
     </ion-content> 
    </ion-view> 
    </script> 

    <script id="templates/facts.html" type="text/ng-template"> 
    <ion-view view-title="Facts"> 
     <ion-content class="padding"> 
     <p>Banging your head against a wall uses 150 calories an hour.</p> 
     <p>Dogs have four toes on their hind feet, and five on their front feet.</p> 
     <p>The ant can lift 50 times its own weight, can pull 30 times its own weight and always falls over on its right side when intoxicated.</p> 
     <p>A cockroach will live nine days without it's head, before it starves to death.</p> 
     <p>Polar bears are left handed.</p> 
     <p> 
      <a class="button icon ion-home" href="#/tab/home"> Home</a> 
      <a class="button icon icon-right ion-chevron-right" href="#/tab/facts2">More Facts</a> 
     </p> 
     </ion-content> 
    </ion-view> 
    </script> 

    <script id="templates/facts2.html" type="text/ng-template"> 
    <ion-view view-title="Also Factual"> 
     <ion-content class="padding"> 
     <p>111,111,111 x 111,111,111 = 12,345,678,987,654,321</p> 
     <p>1 in every 4 Americans has appeared on T.V.</p> 
     <p>11% of the world is left-handed.</p> 
     <p>1 in 8 Americans has worked at a McDonalds restaurant.</p> 
     <p>$283,200 is the absolute highest amount of money you can win on Jeopardy.</p> 
     <p>101 Dalmatians, Peter Pan, Lady and the Tramp, and Mulan are the only Disney cartoons where both parents are present and don't die throughout the movie.</p> 
     <p> 
      <a class="button icon ion-home" href="#/tab/home"> Home</a> 
      <a class="button icon ion-chevron-left" href="#/tab/facts"> Scientific Facts</a> 
     </p> 
     </ion-content> 
    </ion-view> 
    </script> 

    <script id="templates/mylongform.html" type="text/ng-template"> 
     <ion-modal-view class="product edit create"> 
      <form name="itemEdit" novalidate> 
      <ion-header-bar class="bar-positive fix-buttons"> 
       <a class="button" ng-click="closeModal()">Cancel</a> 
       <h1 class="title">Form</h1> 
      </ion-header-bar> 
      <ion-content has-bouncing="true"> 
       <div class="row" ng-class="{'no-padding-top': !data.editItem}"> 
       <div class="col"> 
        <label class="item item-input large"> 
        <input type="text" placeholder="Title"> 
        </label> 
       </div> 
       </div> 
       <div class="editable-image horizontal-image"> 
       <div class="add"><i class="icon ion-upload"></i> 
        <div class="instructions">Tap to upload photo</div> 
       </div> 
       </div> 
       <div class="row"> 
       <div class="col"> 
        <label class="item item-input large"> 
        <input type="text" placeholder="Price"> 
        </label> 
       </div> 
       </div> 
       <div class="row description-row"> 
       <div class="col"> 
        <label class="item item-input text"> 
        <textarea placeholder="Description" rows="5" ng-model="item.description" ng-Required="true" name="description" lose-focus-on-return></textarea> 
        </label> 
       </div> 
       </div> 

       <div class="row charity-row"> 
       <div class="col col-10 vert-center"> 
        <div class="charity large"></div> 
       </div> 
       </div> 


      </ion-content> 
      </form> 
     </ion-modal-view> 
    </script> 

    <script id="templates/about.html" type="text/ng-template"> 
    <ion-view view-title="About"> 
     <ion-content class="padding"> 
     <h3>Create hybrid mobile apps with the web technologies you love.</h3> 
     <p>Free and open source, Ionic offers a library of mobile-optimized HTML, CSS and JS components for building highly interactive apps.</p> 
     <p>Built with Sass and optimized for AngularJS.</p> 
     <p> 
      <a class="button icon icon-right ion-chevron-right" href="#/tab/navstack">Tabs Nav Stack</a> 
     </p> 
     </ion-content> 
    </ion-view> 
    </script> 

    <script id="templates/nav-stack.html" type="text/ng-template"> 
    <ion-view view-title="Tab Nav Stack"> 
     <ion-content class="padding"> 

     </ion-content> 
    </ion-view> 
    </script> 

    <script id="templates/contact.html" type="text/ng-template"> 
    <ion-view title="Contact"> 
     <ion-content> 
     <div class="list"> 
      <div class="item"> 
      @IonicFramework 
      </div> 
      <div class="item"> 
      @DriftyTeam 
      </div> 
     </div> 
     </ion-content> 
    </ion-view> 
    </script> 

</body> 

</html> 

JSコード

angular.module('ionicApp', ['ionic']) 

.config(function($stateProvider, $urlRouterProvider) { 

    $stateProvider 
    .state('tabs', { 
     url: "/tab", 
     abstract: true, 
     templateUrl: "templates/tabs.html" 
    }) 
    .state('tabs.home', { 
     cache: false, 
     url: "/home", 
     views: { 
     'home-tab': { 
      templateUrl: "templates/home.html", 
      controller: 'HomeTabCtrl' 
     } 
     }, 

    }) 
    .state('tabs.facts', { 
     url: "/facts", 
     views: { 
     'home-tab': { 
      templateUrl: "templates/facts.html" 
     } 
     } 
    }) 
    .state('tabs.facts2', { 
     url: "/facts2", 
     views: { 
     'home-tab': { 
      templateUrl: "templates/facts2.html" 
     } 
     } 
    }) 
    .state('tabs.about', { 
     url: "/about", 
     views: { 
     'about-tab': { 
      templateUrl: "templates/about.html" 
     } 
     } 
    }) 
    .state('tabs.navstack', { 
     url: "/navstack", 
     views: { 
     'about-tab': { 
      templateUrl: "templates/nav-stack.html" 
     } 
     } 
    }) 
    .state('tabs.contact', { 
     url: "/contact", 
     views: { 
     'contact-tab': { 
      templateUrl: "templates/contact.html" 
     } 
     } 
    }); 


    $urlRouterProvider.otherwise("/tab/about"); 

}) 

.controller('HomeTabCtrl', function($scope, $ionicLoading, $compile) { 

    //$scope.$apply(); 
    //google.maps.event.addDomListener(window, 'load', initialize); 


$scope.initialise = function() { 



      var myLatlng = new google.maps.LatLng(43.07493, -89.381388); 

      var mapOptions = { 
       center: myLatlng, 
       zoom: 16, 
       mapTypeId: google.maps.MapTypeId.ROADMAP 
      }; 
      var map = new google.maps.Map(document.getElementById("map"), 
       mapOptions); 


      //Marker + infowindow + angularjs compiled ng-click 
      var contentString = "<div><a ng-click='clickTest()'>Click me!</a></div>"; 
      var compiled = $compile(contentString)($scope); 

      var infowindow = new google.maps.InfoWindow({ 
       content: compiled[0] 
      }); 

      var marker = new google.maps.Marker({ 
       position: myLatlng, 
       map: map, 
       title: 'Uluru (Ayers Rock)' 
      }); 

      google.maps.event.addListener(marker, 'click', function() { 
       infowindow.open(map, marker); 
      }); 

      $scope.map = map; 

      console.log(map); 

     }; 


     setTimeout(function() { 
      google.maps.event.addDomListener(document.getElementById("map"), 'load', $scope.initialise()); 
      $scope.$apply(); 
      }, 100); 

     /* $scope.centerOnMe = function() { 
      if (!$scope.map) { 
       return; 
      } 

      $scope.loading = $ionicLoading.show({ 
       content: 'Getting current location...', 
       showBackdrop: false 
      }); 

      navigator.geolocation.getCurrentPosition(function(pos) { 
       $scope.map.setCenter(new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude)); 
       $scope.loading.hide(); 
      }, function(error) { 
       alert('Unable to get location: ' + error.message); 
      }); 
     }; */ 

     $scope.clickTest = function() { 
      alert('Example of infowindow with ng-click') 
     }; 
}); 

ことを確認し、その中ですべての問題に直面している場合は私に知らせてください。
ありがとう

+0

返信ありがとうございます**ここであなたが**/tab/home **を地図表示に使用しています。これは最初に読み込まれる最初のビューです。正常に動作していますが、ロードマップ**/tab/about **のように2番目または3番目のビューに読み込まれる別のビューでは、つまり、ビューは一部のボタンのクリックで読み込まれます。 –

+0

**ここに私の.configコードは次のとおりです。 - ** 'の.config(関数($ urlRouterProvider、$ stateProvider){$ stateProvider.state( 'FIRSTPAGE'、{ \t \tは、URL: '/'、 templateUrl 'テンプレート/ firstPage.html ' コントローラ: 'Ctrlキー' })状態( 'ホーム'、{ \t \t URL: '/マップ' templateUrl: 'テンプレート/ home.html' コントローラ' mapCtrl ' }); $ urlRouterProvider.otherwise( "/"); }) '**テンプレート/ home.html **ビューのマップを読み込みたい –

+0

ここでは、要件。今度はホームページの代わりに私たちの最初のビューをロードしています(マップビュー) リンクをhttps://codepen.io/hirojaisinghani/pen/QKYVYVにもう一度チェックし、コードを変更してください。 これがうまくいくことを願っています。 まだ問題がある場合は教えてください。 ありがとう – Hiro

関連する問題