2013-11-14 158 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上觀看了幾個簡單的例子就說清楚了。