ngrxLet:异步管道的更好版本

昨天,我们提到如何异步管材可配合使用* ngIf* ngFor在我们的模板中声明一个局部变量,允许我们使用相同的数据有多个表达式:

              
              
<divngIf"user$ | async as user"><p>名字:{{用户。firstName}}p><p>姓:{{用户。lastName}}p>div>
代码语言:HTML、XMLxml

虽然上面的代码运行得很好,但添加其他代码并不总是很方便* ngIf* ngFor在我们的模板中。异步管道的另一个缺点是它不让我们知道是否可观测的发生错误或成功完成。

这就是ngrxLet指令可以解决问题,因为它用简单的语法解决了上述所有缺点。我们之前的例子变成:

              
<divngrxLet"user$ as user"><p>名字:{{用户。firstName}}p><p>姓:{{用户。lastName}}p>div>
代码语言:HTML、XMLxml

如果我们想要获得任何错误或可观察对象的完成状态,我们可以通过暴露的更多局部变量来实现ngrxLet

              
<divngrxLet“user$ as user;误差为e;完整为c">
代码语言:HTML、XMLxml

你可以找到完整的工作示例ngrxLet可以使用NPM作为依赖项安装(NPM install @ngrx/component),重要的是要注意它不是全部ngrx状态管理库,只是它的一个很小的子集,所以使用该指令不需要使用其他任何东西ngrx

如果你想深入了解,这里有一个稍微扩展版本的教程链接,其中有更多信息:ngrxLet -一个更好的异步管道版本

异步管道语法技巧

昨天,我们写过如何使用异步管道自动订阅和取消订阅从我们的观测数据。

当我教授这个话题时,人们通常至少有以下两种反对意见之一:

如果我还需要订阅的数据在我的Typescript代码?

首先,使用异步pipe似乎只允许您访问HTML模板中的数据。但事实并非如此,因为你仍然可以使用tap操作符来“监视”你的可观察对象,并从中获取数据。例如(完整例子):

              
.name$ = nameService.getName()。管(丝锥(的名字= >.name = name));
代码语言:打印稿打印稿

然后在HTML模板中:

              
<p>async管道的名称:{{Name $ | async}}p>
代码语言:HTML、XMLxml

如果我需要从订阅中的对象中读取多个属性怎么办?

另一种说法是,你不想以这样的方式结束:

              
<p>名字:{{(用户$ | async)?。firstName}}p><p>姓氏:{{(用户$ | async)?。lastName}}p>
代码语言:HTML、XMLxml

上面的代码很难阅读,每个属性都需要一个订阅。这本身就是一场灾难,因为每个订阅都可能触发来自服务器的相同数据的HTTP请求!

相反,您可以这样做,只使用一个订阅,将结果存储在一个局部变量中,然后在数据可用时呈现数据。此技术适用于任何结构指令,例如* ngIf* ngFor

              
<divngIf"user$ | async as user"><p>名字:{{用户。firstName}}p><p>姓:{{用户。lastName}}p>div>
代码语言:HTML、XMLxml

如果通过添加元素来适应订阅来更改DOM结构让您感到困扰,那么您可以使用ng-template相反,尽管这里的语法也可能有点令人不安:

              
<ng-templatengIf] ="user$ | async"让用户><p>名字:{{用户。firstName}}p><p>姓:{{用户。lastName}}p>ng-template>
代码语言:HTML、XMLxml

好了,今天就到这里吧。明天,我们将看到我们如何做得比现在更好。

出口指示

昨天,我们讨论了模板引用变量.今天,我想向你展示如何使用模板引用变量访问指令。

你以前可能见过这种语法:

              
<形式myForm“ngForm”ngSubmit)=“onSubmit (myForm)”>
代码语言:HTML、XMLxml

这种语法是可能的,因为NgForm指令是出口使用以下语法(实际的Angular源代码在这里):

              
@Directive({exportAs:“ngForm”})
代码语言:打印稿打印稿

上面的代码允许使用模板引用变量,例如# myForm = " ngForm ".这种技术在Angular的表单和组件库中被广泛使用,用于将公共指令属性(和方法)公开给组件的模板。

例如,我们可以访问myForm.valuemyForm.valid在表达式中。

ngModel也是这样输出的。

模板引用变量

欢迎来到我的第一期每日Angular时事通讯!我答应过你的,我会保持简洁。


今天的主题是模板引用变量。我通常称这个特性为“标签语法”,因为这就是它的用法:

              
<输入电话占位符“电话号码”/>
代码语言:HTML、XMLxml

下面是我如何使用引用变量来获取输入的值,例如:

              
<按钮点击)=“callPhone (phone.value)”>调用按钮>
代码语言:HTML、XMLxml

电话引用前面创建的带有#phone属性的输入元素。这是模板引用变量。
这些变量可以用来代替ngModel例如。更好的是,它们还可以使用组件和指令!

例如,下面的模板引用变量你好是否可以访问所有的公共属性和方法HelloComponent

              
<app-hello你好>app-hello>
代码语言:HTML、XMLxml

有关更多信息和示例,请阅读另一篇文章这是我的一篇短博客