Angular2:使用ngOnInit vs Resolver获取REST数据

时间:2016-12-21 14:11:01

标签: angular

Hello亲爱的堆栈溢出社区, 我面临一个角度2的软件设计问题而且我不知道什么是更好的解决方案:

在ngOnInit中获取REST数据还是使用解析器? 我从来没有遇到过在ngOnInit方法中获取数据的问题,但现在我已经听说过旋转变压器了,我不知道该使用什么:

ngOnInit() {
  this.authHttp.get('http://localhost:8080/configuration')
      .map((response: Response) => <ConfigurationData>response.json())
      .subscribe(settings => this.settings = settings);
}

VS

@Injectable()
export class ConfigurationsResolver implements Resolve<ConfigurationData> {
    constructor(private authHttp: AuthHttp) {}

    public resolve(route: ActivatedRouteSnapshot): Observable<ConfigurationData> {
        return this.authHttp.get('http://localhost:8080/configuration')
            .map((response: Response) => <ConfigurationData>response.json());
    }
}

解析器会产生更多代码。额外的课程,申报提供者等。 所以你怎么看?关于此的任何陈述和最佳做法?

4 个答案:

答案 0 :(得分:0)

如果您拥有企业应用程序,最好的方法是使用RxJs,将您的逻辑保留在服务中并触发路由器葫芦或组件中的服务。

或者更好的代码和更多代码使用ngrx/store并将所有逻辑保持在状态。

在这两个选择之间你写了,我宁愿在服务中写一切,并保持组件清洁。

答案 1 :(得分:0)

在单一责任原则和可测试性方面,服务方法更加清晰。

假设您的某个业务层组件需要配置。所以它的需要可以表示为&#34;我需要配置&#34;。它并不关心如何获得它,在何处获得它以及所有这一切 - 它所需要的只是配置数据,而这一切都是如此。所以,为了让这个数据组件现在表达另一个查询 - &#34;我需要有人知道如何为我提取配置数据&#34;。这是您注入服务的地方。主要组件并不关心这些数据是硬编码的,从服务器获取的还是以某种方式从随机生成器派生的 - 这不是它的业务。因此,您的主要组件不会维护与其任务无关的任何逻辑,并且您的配置提取程序不会维护有关如何处理此数据的任何逻辑。他们每个人都有一个责任。

这样可以轻松测试它们。您可以轻松地模拟配置数据获取器组件并将其注入主组件中。它为您提供了在易于控制的条件下测试主要组件的简便方法 - 您的模拟组件允许您测试主要事物如何处理获取正确的数据,不正确的数据,调用失败等等 - 因为它是您的模拟它可以帮助您模拟你想要的任何东西。

答案 2 :(得分:0)

使用解析器,目标组件内的组件将能够访问解析器中获取的数据;并且不是nginit方法的情况....你需要测试它以确认

答案 3 :(得分:0)

解析器是在导航到路由之前执行的,因此,如果其余服务需要很长的响应时间,则这样可以避免显示空模板。