0

データベース関連のクエリ/更新を行うサービスを定義しています。サービスからオブジェクトを取得して角度要素のデータ解析を行うコントローラーを定義しました。各スコープを別々に保ちたい

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 からのデータを反映していますが、コントローラーはそのデータを取得できません。

4

2 に答える 2

1

$resource オブジェクト メソッドを呼び出すと、すぐに空の参照 (isArray に応じてオブジェクトまたは配列) が返されることに注意してください。サーバーからデータが返されると、既存の参照に実際のデータが取り込まれます。通常、リソースはモデルに割り当てられ、ビューによってレンダリングされるため、これは便利なトリックです。オブジェクトが空の場合、レンダリングは行われません。サーバーからデータが到着すると、オブジェクトにデータが取り込まれ、ビューが自動的に再レン​​ダリングされて新しいデータが表示されます。これは、ほとんどの場合、アクション メソッドのコールバック関数を記述する必要がないことを意味します。

https://docs.angularjs.org/api/ngResource/service/ $resourceから

「ioHome.getRooms();」以来 $resource が dbData を空の参照として取得しているデータを返す前に呼び出されています

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
}]);
于 2016-12-22T09:01:21.403 に答える
-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メソッドはコントローラーから見えません。

于 2016-12-22T08:35:34.450 に答える