【问题标题】:Angular Factory Manipulating Data (CRUD) with function in the Factory具有工厂功能的 Angular 工厂操作数据 (CRUD)
【发布时间】:2013-11-27 18:05:35
【问题描述】:

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

我的工厂设置如下:

angular.module("myApp").factory("ServiceTypeFactory", ['$http', function ($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"
        }
    ]
}

【问题讨论】:

  • 我不知道你的方法是否是测试 CRUD 的最佳方法。您可以使用类似 $scope.users 的数组:jsfiddle.net/charms/eP7T8 $scope.users = [{id:"31546310-8a09-4887-9bca-7a719af0620e", firstName:"John", lastName:"Smith", email:" john@john.com",密码:"bla"},{id:"62637e0b-c7e6-44c7-bd1e-8f6130eb648f",名字:"Jane",姓氏:"Adams",电子邮件:"jane@jane.com" , 密码:"bla"}];或者如果你想用 REST 测试 CRUD,你可以使用 $httpBackend 和 $resource:docs.angularjs.org/api/ngMock.$httpBackend 我不知道这对你是否有用,但我希望这会有所帮助。
  • 问题是我可以在两个不同的控制器中更新此数据,并且我希望将数据绑定到两个控制器。就像我希望数据真正存储在工厂中一样。因此,无论哪个控制器更新它,数据都会被消化到其他控制器。我的问题是不知道如何引用数据的真实来源。我不想在范围内访问它。我希望它存储在一个位置。
  • 尝试egghead.io在控制器之间共享数据。

标签: angularjs


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多