angularjs的角度第 1部分

分享于 

6分钟阅读

Web开发

  繁體

部分 1 - 借助 TypeScript 扩展 AngularJS

最近angularjs从前端开发者那里获得了巨大的关注。 有很多框架可以供选择,而且大多数框架都是用非常常见的特性来。 EmberJS开始之前开始,并且由苹果支持,EXTJS 也是一个完全特色的MVC框架,然后是 backbone.js。 为解决问题而非常活跃,从技术世界扩展它的能力,我们大多数人都是为了使我们。 现在,随着它的最近在文稿中的发展,很多开发人员都在玩它。

这个库中有许多变化,让我们认为这个库没有正确的方向,就像它的他框架一样。 但现在 Angular 仍在发展并保持我们对它的兴趣。

从我以前使用agavi和. NET 背景的经验来看,我发现在与它的他MVC框架比较的时候是缺少或者不标准化的。 这并不是为了提供这些特性,但问题是没有人把这些视为框架。 一个尺寸不能全部吻合。 也许我想设置这个框架的方式,其他人甚至不需要它。

本文不是讨论这个框架是什么,或者angularjs的替代方案是什么。 我们将更深入地研究框架的某些方面,以克服样板代码,使AngularJS更加甜美。

@inject@injectable$inject$injector。 什么意思?

依赖注入已经成为AngularJS最有趣的特性。 它是具有许多相关模块和服务的复杂应用开发的最有价值的方面。

请从 https://docs.angularjs.org/guide/di 网站上的官方网站上阅读 Angular 实现。

参考: https://docs.angularjs.org/guide/di

这东西很有用,到底是什么问题?

  • 你必须传递参数中的所有依赖项。 无疑不是最佳实践,不可维护。 假设你需要 5个上的依赖项来。 假设你几乎处于开发的半路,某些设计更改需要更多的依赖性。
  • 在官方指南中描述的它的他问题是依赖参数 NAME 在缩缩过程中使 Angular 找不到正确的依赖。 通过允许提供 $inject 变量或者内联参数以 string 格式( v1.5和更早版本)。@injectable@inject ( v2+ ) 为 array 指定这些依赖项,Angular 提供了解决。 这很好,但这也增加了我的第一点,因为现在你必须处理附加的string
  • Angular 并不真正知道你需要的依赖项是否已经加载或者。 如果未加载,则不提供从服务器加载它的任何方法。 这意味着你必须在构造函数调用之前加载所有依赖项,包括相关的依赖项。 这在实际的复杂应用开发中并不十分实用。

让我们看看如何解决这些问题。

我想的一个快速解决方案是服务定位器 Pattern。 实际上,Angular 使用 $injector 提供服务定位器。 很好,这解决了我们的第二个问题。 如果我们把这个对象作为参数插入,我们的代码看起来会很好。

参考: https://docs.angularjs.org/api/auto/service/$injector

但如果开发人员在他们需要的地方添加了这个代码,那么它将比我们试图修复的实际问题更。 我宁愿拥有公共服务或者工厂,每当我需要时提供依赖实例。

很好,我们解决了第一个 2问题,现在开发人员只能注入服务定位器,这是一个巨大的改进。

我们仍然可以通过继承来进一步改进。 基本上,我们将把这些常见的注入部分抽象到父类,开发人员只需要实现这些父类。 当我们将原始实现与这里方法进行比较时,这是一个巨大的改进。

我可以使用相同的BaseService 类来实现我的其他服务,如上面。

我也可以 HTTP ( ) 从服务器异步获取数据的方法,只需从 GetItems 方法并从调用方处理它。

类似地,我们将实现 BaseController 以使用这里 ServiceLocator:

还有另外两个需要注意的事项:

首先,我让 BaseController 泛型实现 IScope 类型。 它只是为从这个基类继承的每个控制器定义范围对象。

第二是 Init abstract 方法。 因为我们必须预定义构造函数,我们不希望开发人员在子控制器中再次定义它。

我不担心 controllerAs 部分,因为我的实现只是为了演示目的。

最后,我们的控制器将如下所示:

就是这样,它不是干净和可以维护的? 开发人员将更少关注 Angular 和更多关于功能的内容。

我们可以类似的方式实现这些组件。 它需要一些额外的东西来处理 AngularJS。 我将在下一篇文章中介绍。

我刚提到的另一个问题是动态加载服务,我们还没有真正解决这个问题。 我将在下一篇文章中展示完整的源代码。

希望它能提供一些想法,并促使开发人员将AngularJS作为一个框架,而不仅仅是一个库。

第 2部分>>


PAR  angular  Angle  Angles  
相关文章