2017-06-25 10 views
0

私は間違いなくgoogleのライブラリを読み込んでいますが、私は'google' not definedを取得しています(少なくとも私はchromeの開発ツールから見ています)。es6/reactのある外部ライブラリは '定義されていません'

私は非常に単純なフロントエンドのWebページのgoogle places apiをヒットしようとしています。フロントエンドのWeb開発者(リアクションを含む)の学習では、基本的にnpmを使用する方法と、すべてをインポートする方法を学びましたが、外部ライブラリを使用すると困っています。

私は

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBq8oeYyntc6d0JP5iaqMtPMTBhxiItdJw&libraries=places"></script>

が、今は私がこの

よう ReactDOM.render(...)前に私のindex.jsで little-loaderを使用しようとしている私のindex.htmlで、この経由してGoogleプレイスのライブラリをロードすることができるはずです
import LittleLoader from 'little-loader'; 

LittleLoader(
    "https://maps.googleapis.com/maps/api/js?key=AIzaSyBq8oeYyntc6d0JP5iaqMtPMTBhxiItdJw&libraries=places", 
    function (err) { 
     console.log("hi paul!"); 

     // This is just to check I *have* the google library loaded/working 
     var pyrmont = new google.maps.LatLng(-33.8665433,151.1956316); 
}); 

オンラインのすべての例は、これが(タグ付きで、または少なくともリトルローダーのコールバックで)機能するはずです。しかし、私が何をしても、私は./src/index.js Line 14: 'google' is not defined no-undefになります。私はを実行する私はちょうどgoogleをコンソールに入力すれば、chrome devのコンソール - >ソースのgoogle mapsライブラリを参照してオブジェクトを取得します。

だから私の通常のJavaScriptでGoogleのライブラリを使用するにはどうすればいいですか?私の最高の推測は、どういうわけか、ロードを延期/非同期にしているが、その使用にsetTimeoutを設定すると、google.maps.LatLng...は役に立ちません。

私はこのフロントエンドの開発の世界を理解しようとしています。私はES6 jsの考え方で少し失われています。私はこれが簡単だと確信していますが、私は苦労しています!

答えて

0

Google MapsのAPIは非同期で自身を初期化し、二つのことが起こるまで、それを使用することはできません。

  1. Google MapsのAPI用のコードは、あなたのLittleLoader()機能によってロードされます。
  2. Googleマップは独自の非同期初期化を完了します。両方が行われたときに知って

一つの方法は、GoogleマップのAPIのURLでcallback=xxxxクエリパラメータを指定することです。その後、読み込みが完了すると、その関数が呼び出され、Googleマップのすべての機能を使用できます。上記の両方の項目が完了すると、そのコールバックが呼び出されます。

import LittleLoader from 'little-loader'; https://developers.google.com/maps/documentation/javascript/tutorial

function initMap() { 
    // This is just to check I *have* the google library loaded/working 
    var pyrmont = new google.maps.LatLng(-33.8665433,151.1956316); 
} 

LittleLoader(
    "https://maps.googleapis.com/maps/api/js?key=AIzaSyBq8oeYyntc6d0JP5iaqMtPMTBhxiItdJw&libraries=places&callback=initMap", 
    function (err) { 
     console.log("hi paul!"); 
}); 

あなたはここでは例のこのタイプを見ることができます。

私はこれが正しく動作するためにコールバック関数がグローバルスコープからアクセスできるようにする必要があることを疑います。

同様の例ここでは、動的スクリプトローディング使用:http://jsfiddle.net/doktormolle/7cu2F/

をそして、ここで同じこと:Dynamically Loading Google Maps api's

+0

よろしくお願いします。したがって、それ自身のための独自の非同期初期化を持っています。ユニットコールバックを使用すると、ライブラリの他の用途はユーザに応答するので、ライブラリはそれまでに設定されています。それは理にかなっている。本当にありがとう。私は次のコンピュータに行くときにこれを試してみる。質問tho、第三者libを使用するための一般的なベストプラクティスは何ですか? index.htmlのスクリプトタグを使用し、libはグローバルスコープで「うまくいく」べきですか?このような非同期ライブラリについては、init関数を作成するこのパターンがベストプラクティスですか? – mgs

+0

@mgs - ライブラリに独自の非同期初期設定(Googleマップと同じように)がある場合は、コールバックまたは使用準備ができたことを示す約束を提供する必要があります。ほとんどのライブラリには、非同期初期化のタイプはありませんが、通常はこれを表示しません。 – jfriend00

+0

助けてくれてありがとう。私は機会を得るとそれを試してみると、私は何かトラブルがある場合私は戻って投稿する – mgs

0

メインのindex.htmlファイルにスクリプトを追加してみてください。アプリ全体で利用可能になるはずです。

+0

OPがやろうとしているものの全体のポイントは、動的にGoogle MapsのAPIをロードすることであるとも、あなたの場合'

  • 11. ejsの部分が定義されていません。
  • 12. __init__メソッドの例外 - NameError:name 'setShiftNum'が定義されていません
  • 13. setTimeoutコールバックの例外:ReferenceError:googleが定義されていません
  • 14. JavaScript関数はFireFoxでのみ定義されていません - indeed_clkは定義されていません
  • 15. ユーザー定義型が定義されていませんadodb.recordset
  • 16. Typescriptモジュール:定義が定義されていません
  • 17. オリジナル例外:ReferenceError:ioが定義されていません
  • 18. ローカル変数がメソッド外で定義されていません
  • 19. RXJS - 例外:Rxが定義されていません。2
  • 20. Javascript - 定義はcdnから定義されていません
  • 21. ルートコンポーネントの外部で定義された外部変数を反応させる
  • 22. ReferenceError:定義されていません
  • 23. TypeError:this.props。定義されていません
  • 24. tkinterコールバックメソッドが定義されていませんグローバル名が定義されていません
  • 25. Meteor.findOneの出力は、Mongo.ObjectId以外では定義されていません
  • 26. node_modulesのライブラリでAngular2のrequireが定義されていません
  • 27. Netbeansライブラリが定義されていてもJavadocが見つかりません
  • 28. 外部URLを使用しているときにReact - Map関数が定義されていません
  • 29. 最初の部分表示jquery selector.attrib( 'id')は定義されていません
  • 30. VBA - ユーザー定義型が定義されていません