2013-11-14 40 views
0

我有一个简单的Angular应用程序,它使用工厂从“JSON”文件中提取项目列表。最终这将连接到一个数据库,但现在我只是从一个静态文件中提取。 JSON文件包含一组项目。我真的很想知道如何在承诺返回给控制器后在工厂中获得对我的数据的引用。角度工厂操作数据(CRUD)在工厂中的功能

我厂的设置如下:

angular.module( “对myApp”)工厂( “ServiceTypeFactory”,[ '$ HTTP',函数($ HTTP){

return { 
    ServiceTypes: function() { 
     return $http.get('json/servicetypes.json').success 
     (
      function (data) { 
       return data; 
      }); 
    }, 



    find: function (id) { 
     return _.findWhere(data, {ID:id}); // Not sure how to get access to the data 
    } 
} 

} ]);

这很好,我可以跨多个控制器共享工厂。我缺少的部分是如何从我的json文件中引用特定的数组项并在控制器中进行更新。我没有按照如何获得对实际数据的引用,因此当我在一个控制器中修改该项目时,更改将反映在另一个控制器中。

在我的两个控制器中,我有以下代码来初步获取数据的引用。

var popService = function (data) { 
     $scope.ServiceTypes = data; 
    } 

    // IF at ANY time the Service Types have not been loaded we will populate them. 

    if (typeof $scope.ServiceTypes === "undefined") { 
     ServiceTypeFactory.ServiceTypes().success(popService); 
    } 

我的理解是我的$ scope.ServiceTypes有一个真正的数据引用。如何返回我的工厂中的某个函数,以访问我的数据的实际单一来源。我发现工厂返回的数据是函数的一个对象,但我错过了如何在工厂中引用这些数据来操纵它。将来我想对它进行CRUD操作,暂时我只是试着制定机制。

什么我的JSON文件看起来像:

{ 
    "serviceTypes": [ 
     { 
      "ID": "1001", 
      "ServiceTypeName": "111111", 
      "Description": "aaaaaaa" 
     }, 
     { 
      "ID": "1002", 
      "ServiceTypeName": "222222", 
      "Description": "bbbbbbb" 
     }, 
     { 
      "ID": "1003", 
      "ServiceTypeName": "3333333", 
      "Description": "ccccccc" 
     }, 
     { 
      "ID": "1004", 
      "ServiceTypeName": "444444", 
      "Description": "dddddddd" 
     }, 
     { 
      "ID": "1005", 
      "ServiceTypeName": "5555555", 
      "Description": "eeeeeee" 
     } 
    ] 
} 
+0

我不知道你的方式是测试CRUD的最好方法。 您可以使用像$ scope.users这样的数组:http://jsfiddle.net/charms/eP7T8/ $ scope.users = [{id:“31546310-8a09-4887-9bca-7a719af0620e”,firstName: “John”,姓氏:“Smith”,电子邮件:“[email protected]”,密码:“bla”},{id:“62637e0b-c7e6-44c7-bd1e-8f6130eb648f”,名字:“Jane” “亚当斯”,电子邮件:“[email protected]”,密码:“bla”}]; 或者,如果你想与REST测试CRUD你可以使用$ httpBackend与$资源: http://docs.angularjs.org/api/ngMock.$httpBackend 我不知道这是不是有用你但我希望这有助于。 –

+0

问题是我可以在两个不同的控制器中更新这些数据,并且我想要将数据绑定到两个控制器。这就像我希望数据真正存储在工厂中一样。所以无论哪个控制器更新它,数据将被消化到其他控制器。我的问题是不知道如何引用数据的真实来源。我不想在范围内访问它。我希望它存储在一个地方。 – pehaada

+1

尝试http://egghead.io在控制器之间共享数据。 –

回答

0

只是需要清理的代码了一点。在egghead.io上观看了几个简单的例子就说清楚了。