【问题标题】:Map an http object to model将 http 对象映射到模型
【发布时间】:2017-05-04 20:11:41
【问题描述】:

我在将 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() 函数并将值映射到模型的单个实例并返回该单个模型的方法。

提前致谢!

【问题讨论】:

    标签: javascript angular typescript lodash


    【解决方案1】:

    你应该使用下面的代码,

    all () : angular.IPromise<MyObjModel[]> {
                let uri = `/myuri`;
    
                return this.api.get(uri).map(data=><MyObjController>data.json())).toPromise();
                });
            }
    

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

    【讨论】:

    • 您介意解释一下吗?这似乎不起作用,我想知道你为什么做了某些事情(比如使用 MyObjController 而不是模型),所以我可以尝试理解它来修复它
    • 当您根据all 方法的返回类型返回承诺时,您不应该使用.then。您无需使用该类来充当模型,而只需使用接口即可。
    猜你喜欢
    • 2015-08-27
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    相关资源
    最近更新 更多