Angularjs 角度2可观察不';t';地图';模仿

Angularjs 角度2可观察不';t';地图';模仿,angularjs,observable,Angularjs,Observable,在学习Angular 2时,我使用了一个observable通过API获取一些数据。像这样: getPosts() { return this.http.get(this._postsUrl) .map(res => <Post[]>res.json()) .catch(this.handleError); } 我面临的问题是map操作符没有对Post模型执行任何操作。例如,我尝试为img值设置默认值,但

在学习Angular 2时,我使用了一个observable通过API获取一些数据。像这样:

getPosts() {
        return this.http.get(this._postsUrl)
            .map(res => <Post[]>res.json())
            .catch(this.handleError);
    }

我面临的问题是map操作符没有对Post模型执行任何操作。例如,我尝试为img值设置默认值,但在view post.img中没有显示任何内容。我甚至用另一个模型(Message[])更改了Post[],但行为没有改变。有人能解释这种行为吗?

当我想在模板中使用计算属性时,我遇到了类似的问题

我在本文中找到了一个很好的解决方案:

在模型上创建一个静态方法,该方法接受一个对象数组,然后从映射函数调用该方法。在静态方法中,您可以调用已定义的构造函数或使用副本构造函数:

映射方法 现有构造函数
您可以使用
as
关键字将JSON反序列化到您的对象

Angular2医生会带你走过这段路。然而,简言之

型号:

export class Hero {
  id: number;
  name: string;
}
服务:

...
import { Hero } from './hero';

...
get(): Observable<Hero> {
    return this.http
               .get('/myhero.json')
               .map((r: Response) => r.json() as Hero);
}

谢谢,看起来是个不错的解决方案!我会再等几天,也许会有其他答案,否则我会把你的标记为已接受!干得好。不幸的是,如果您希望打开Tconfig中的“noImplicitAny”设置,则需要关闭它。如果类和json数据的参数名称不同,该设置是否有效?i、 如果类有
名称
,我们从json得到
用户名
,那么,我不得不说它根本没有回答这个问题。基本上,
as
语法(您建议的)的工作方式与
完全相同。语法。唯一的区别是
语法与(.tsx文件-
JSX
语法)冲突,如中所述。此外,在这种情况下,
,或
as
都不起作用。上面的答案是正确的。对我来说没有意义的是,为什么Typescript在强制转换失败或泛型对象被传递给需要Post类型的函数时不抛出错误?Typescript类型检查不起作用吗?泛型对象可以具有与类型化参数不对齐的随机属性,因此不会发生隐式转换,但泛型对象的传递没有问题。
export class Post {
  // Existing constructor.
  constructor(public title:string, public content:string, public img:string = 'test') {}

  // New static method.
  static fromJSONArray(array: Array<Object>): Post[] {
    return array.map(obj => new Post(obj['title'], obj['content'], obj['img']));
  }
}
export class Post {
  title:string;
  content:string;
  img:string;

  // Copy constructor.
  constructor(obj: Object) {
    this.title = obj['title'];
    this.content = obj['content'];
    this.img = obj['img'] || 'test';
  }

  // New static method.
  static fromJSONArray(array: Array<Object>): Post[] {
    return array.map(obj => new Post(obj);
  }
}
export class Post {
  title:string;
  content:string;
  img:string;

  // Copy constructor.
  constructor(obj: Post) {
    this.title = obj.title;
    this.content = obj.content;
    this.img = obj.img || 'test';
  }

  // New static method.
  static fromJSONArray(array: Array<Post>): Post[] {
    return array.map(obj => new Post(obj);
  }
}
export class Hero {
  id: number;
  name: string;
}
...
import { Hero } from './hero';

...
get(): Observable<Hero> {
    return this.http
               .get('/myhero.json')
               .map((r: Response) => r.json() as Hero);
}
get(id: string) {
    this.myService.get()
      .subscribe(
        hero => {
          console.log(hero);
        },
        error => console.log(error)
      );
}