2016-12-22 10 views
0

db関連のクエリ/更新を行うサービスが定義されています。私は、オブジェクトをサービスから取得することによって、角度要素のデータ解析を行うコントローラを定義しました。各スコープを異なるようにしたいAngular 1.x FactoryからAngular 1.xコントローラへデータを送信

ngResourceを使用してサービスからコントローラにデータを渡すにはどうすればよいですか。

サンプルサービス:

app.factory("ioHomeService", ["$rootScope","$resource", function($rootScope,$resource) { 
    var svc = {}; 
    var home = $resource('/home/getAll'); 
    var dbData= home.get(); 
    svc.getRooms = function() { 
     return dbData; 
    }; 
    return svc; 
}]); 

サンプルコントローラー:

app.controller("homeCtrl",["$scope","$mdDialog","ioHomeService",function($scope,$mdDialog,ioHome){ 
    $scope.dbData = ioHome.getRooms(); 
    //Here UI specific objects/data is derived from dbData 
}]); 

DBを照会し、その結果、サービスにdbdataのは、DBからデータを反映しているが、コントローラは得ることができないavialbleされた後そのデータ

+0

実際にあなたのコードは、問題の多くを持っているとして、あなたはdbdataのを取得しているデータが返される前に呼び出されています。 $リソースは非同期呼び出しです。より深く進む前にPromise&$ qに慣れるべきです。 –

答えて

1

$リソース・オブジェクト・メソッド を呼び出すことは直ちに( でIsArrayに応じてオブジェクトまたは配列)、空の参照を返すことを理解することは重要です。データがサーバから返されると、既存の 参照に実際のデータが入力されます。これは有用なトリック です。通常、リソースはモデルに割り当てられているため、ビューによってレンダリングされるのは です。空のオブジェクトを持つとレンダリングされません。 サーバーからデータが到着すると、オブジェクトには というデータが設定され、ビューに自動的に再描画され、 の新しいデータが表示されます。これは、ほとんどの場合、アクションメソッドに対して コールバック関数を書く必要がないことを意味します。

https://docs.angularjs.org/api/ngResource/service/ $リソース

から以降 'ioHome.getRooms();' $リソースが空参照

app.factory("ioHomeService", ["$rootScope","$resource", function($rootScope,$resource) { 
    var svc = { 
    dbData : {} 
    }; 
    var home = $resource('/home/getAll'); 
    var svc.dbData.rooms = home.get(); 
    return svc; 
}]); 

コントローラ

app.controller("homeCtrl",["$scope","$mdDialog","ioHomeService",function($scope,$mdDialog,ioHome){ 
    $scope.dbData = ioHome.dbData; 

    //You can access the rooms data using $scope.dbData.roooms 

    //Here UI specific objects/data is derived from dbData 
}]); 
-1

サービスオブジェクトを返す必要があります。

app.factory("ioHomeService", ["$rootScope","$resource", function($rootScope,$resource) { 
var svc = {}; 
var home = $resource('/home/getAll'); 
var dbData= home.get(); 
svc.getRooms = function() { 
    return dbData; 
}; 
return svc; //here 
}]); 

現在、getRoomsメソッドはコントローラには表示されません。

+0

申し訳ありません。私は、コード内のリターンSVCを追加しました。まだ空のオブジェクトを受信する – rcreddy

関連する問題