将http对象映射到模型

时间:2017-05-04 20:11:41

标签: javascript angular typescript lodash

我无法将http对象映射到我的模型,这就是我正在使用的内容:

MyObjController.ts

class MyObjController {
        constructor (
            private myObj:myObjService,
            private $scope:angular.IScope,
            private modal,
            private notifier,
            private $translate,
            private $state,
            public items:MyObjModel[],
            public loading
        ) {
            this.loading = this.myObj.all();

            this.loading.then((allItems) => {
                this.items = allItems;
            });
        }
}

MyObjService.ts

all () : angular.IPromise<MyObjModel[]> {
            let uri = `/myuri`;

            return this.api.get(uri).then((response:any) => {
                return _.map(response.data, MyObjModel.create);
            });
        }

MyObjModel.ts

export class MyObjModel {
        constructor () { }

        id:string;
        name:string = '';
        organizationId:string = '';

        static create (apiResponse) {
            let model = new MyObjModel();

            model.id = apiResponse.Id;
            model.name = apiResponse.Name;
            model.organizationId = apiResponse.OrganizationId;

            return model;
        }
    }

这种方法不起作用,因为_.map从我的response.data发送每个值,并为每个属性创建一个新的MyObjModel实例,然后创建模型数组。我正在寻找一种方法将response.data作为一个整体发送到我的create()函数,并让它将值映射到模型的单个实例并返回该单个模型。

提前致谢!

1 个答案:

答案 0 :(得分:1)

您应该使用以下代码,

all () : angular.IPromise<MyObjModel[]> {
            let uri = `/myuri`;

            return this.api.get(uri).map(data=><MyObjController>data.json())).toPromise();
            });
        }

您可以使用接口而不是类和构造函数,这也是推荐的做法