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
}]);

查询数据库并获得结果后,服务中的 dbData 反映了数据库中的数据,但控制器无法获取该数据

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 回答