三种方式更新角信号

昨天,我写了一些最佳实践在暴露一个信号在我们的角度应用程序。现在让我们看一下三种不同的方式可以更新一个信号。

设置()

最简单的方法来更新是一个信号设置()方法。好又简单的字符串或布尔值等基本数据类型:

变异()

如果我们只使用一个对象或数组和想要更新一个或两个属性的对象/数组,变异()的路要走。让我们考虑以下信号:

更新为我们的第一次货币看起来像这样:

update ()

当一个信号的新值取决于其先前的值,update ()使用是最好的方法。这是一个计数器的理想方法,例如:

唯一的区别更新变异就是更新返回新的价值,而变异改变对象的地方:

博士TL;

  • 当你需要更新一个简单的值(字符串、数字、布尔值),使用设置()
  • 如果这新值是基于前一个,使用update ()而不是设置()
  • 最后,在其他场景中,在处理对象或数组时,使用变异()

信号:为什么当我们需要他们?

释放角16现在可以使用,信号作为一个开发者预览,这意味着我们可以开始学习信号,测试它们,可能采用它们。

信号的最终目标很简单:改善变化检测角框架通过移除Zone.js的必要性。ieee应用程序将能够更新单个视图(视图是一个组件的子集模板——我们创建新的视图每次我们使用结构指令等ngIfngFor),而不是一个接一个检查整个组件树,启用我们的专注的更新DOM

次要的目标是使角更容易学习比之前通过降低RxJs至关重要,这也适用于如NgRx或NgXs状态管理库。换句话说,我们可以减少对运营商的依赖,主题等。

现在,我们介绍了为什么,让我们来谈谈何时使用信号。得到的全部利益信号从长远来看,使用它们到处可见或数据绑定是有意义的。我知道这听起来像一个大量的工作,但我们可以得到角可以告诉哪些组件时,必须更新值的变化,不管他们的DOM树中的位置。

即将到来的特征角(15,17或更高版本)ieee组件,输入,输出,甚至双向绑定将信号表示为:

我认为是有道理的尽快开始使用信号。角16中的基础API可用,而且很容易学。我已经发表了一课程将会不断更新发展的信号

如果你有任何具体的问题或问题,请随时发送我你的问题。我将覆盖更多关于信号作为通讯的一部分。

角信号还在进行中!

这可能是最明显的变化来发布以来的框架角v2很多年前。

一个新功能叫做信号角是原型,我们可以在GitHub关注整个讨论

信号从哪里来?

他们的答案从角团队到几个不同的请求从开发者社区多年来,更具体地说:

  • 能够使用可见@Input
  • 能够使用角区。js有更多的控制变化检测。
  • 有状态管理与框架,所以我们不需要库内置NgRx或NgXs了。
  • 能够使用角没有依靠RxJs反应的方式。

换句话说,信号将是一个明确而统一的模型如何通过应用程序和数据流将没有任何依赖性(没有RxJs,区,或其他第三方库需要)。

我们必须改变一切在我们的应用程序吗?

不,因为角团队沟通:

  • 信号将是可选的,目前的工作方式与角度将仍然存在。
  • 信号将提供方法,才能很好地处理RxJs(一个信号可以被转换成一个可观测的,反之亦然)

信号会是什么样子?

现在还早有一个明确的API。我们不能100%确定信号将是什么样子,但早期的原型API看起来像这样:

创建一个默认值的信号(在本例中为0)

上面的代码将会非常喜欢做const counter =新BehaviorSubject (0);

设置一个新值信号

更新一个价值来源于当前的价值

更新一个值在一个信号(内部状态的突变)

显示一个信号的值在HTML模板或打印稿代码

上述相当于计数器|异步当使用RxJs。与信号的好处是,不会有更多.subscribe ().unsubscribe ()

如果你想更深入的细节,这是文档的当前的原型。这还早,我不会期望信号成为角17或18之前完全可用,但这仍然是非常令人兴奋!