2016-07-02 7 views
0

myApp.jsインスタンス化角度JSコントローラ

angular.module("myApp" , [subApp1]); //line1 

subapp1.js

import mycontroller from './mycontroller'; 
angular.module("subApp1",[]) 
.config(['$stateProvider','$urlRouteProvider',function($stateProvider,$urlRouteProvider){ 
$stateProvider.state('home', { 
             url:'/home', 
             templateUrl: './app/home.html', 
             controller : myController //line 2 
         }); 
}]) 
.controller('myController',['$scope','$http', myController]]); //line 3 

問題:

以下は、私のhome.htmlです。 Gridは、コントローラーからスコープデータ(同じjson)を取得した場合、jsonからのデータをjsonから取得しても動作しない場合に正常に動作しています。コントローラで

<grid data-type="scope" data="mydata"></dashgrid> 

まだfine.but働いているそのグリッドに移入なっていない$ http.getを使用してデータを取得しています。

Error: Uncaught (in promise) TypeError: Cannot read property 'columns' of undefined(…) 

質問: 1)HTTP GET非同期ですか?実際にデータがロードされる前にグリッドがロードされているかどうか$ http.get 1)コントローラがインスタンス化される(ライン1またはライン2またはライン3)場合? 2)2行目と3行目の違いは何ですか? 3行目は必要ですか?

+0

1):コントローラ機能自体より。もちろん。 1)。どちらも2)。いいえ。 – dfsq

答えて

1

はい、httpは非同期です。

はい、取得要求が完了するのを待たずにビューが表示されるため、その状況で正常に動作することを確認する必要があります(データが存在しない間はグリッドを表示しない、たとえばng-if )。代わりに、状態構成でresolveを使用することです。

コントローラは、ルータがホームステートに切り替わるとインスタンス化されます。

3行目は、コントローラを「myController」という名前でモジュールに登録します。 2行目は、ホーム状態のビューがmyControllerによって制御されていることをルータに伝えます

ng-controller="myController"を使用する場合、またはコントローラの名前を指定してルートを構成する場合は、3行目が必要です

controller : 'myController' 

代わりに

controller : myController