详解Angular中的模板输入变量(let-变量)


当前第2页 返回上一页

3.png

就这样。我们就可以将上下文对象塞入模板中了,这样的话我们也可以直接使用let声明变量的方法来使用这个上下文对象了。

自定义一个简单的类*ngFor指令――appRepeat

那么我们知道是如何设置的了,那么我们就来验证一下是否是对的。接下来,我们仿照ngfor的功能,自己写一个简单的渲染指令。

首先我们定义一个指令:RepeatDirective。代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

@Directive({

  selector: '[appRepeat]',

})

export class RepeatDirective {

  constructor(

    private templateRef: TemplateRef<any>,

    private viewContainer: ViewContainerRef,

  ) { }

 

  @Input() set appRepeatOf(heroesList: string[]) {

    heroesList.forEach((item, index, arr) => {

      this.viewContainer.createEmbeddedView(this.templateRef, {

        //当前条目的默认值

        $implicit: item,

        //可迭代对象的总数

        count: arr.length,

        //当前条目的索引值

        index: index,

        //如果当前条目在可迭代对象中的索引号为偶数则为 true。

        even: index % 2 === 0,

        //如果当前条目在可迭代对象中的索引号为奇数则为 true。

        odd: index % 2 === 1,

      });

    });

  }

}

然后我们将其导入NgModule中,这个过程就省略不写了。然后我们在组件中使用一下这个指令:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

@Component({

  selector: 'app-structural-likeNgFor-demo',

  template: `

    <h2>原神1.5版本卡池角色</h2>

    <h4>自定义ngFor(appRepeat)</h4>

    <ul>

      <li *appRepeat="let h of heroesList;let i = index;let even = even">

        索引:{{i}} -- {{h}} -- 索引值是否是偶数:{{even.toString()}}

      </li>

    </ul>

    <h4>真正的ngFor</h4>

    <ul>

      <li *ngFor="let h of heroesList;let i = index;let even = even">

        索引:{{i}} -- {{h}} -- 索引值是否是偶数:{{even.toString()}}

      </li>

    </ul>

  `,

})

export class StructuralLikeNgForDemoComponent {

  public heroesList: string[] = ['钟离', '烟绯', '诺艾尔', '迪奥娜'];

}

在这里需要注意的是指令中的appRepeatOf不是乱写的。在微语法的解析过程中let h of heroesList中的of首先首字母会变成大写的,变成Of。然后在给它加上这个指令的前缀,也就是appRepeat。组合起来就是appRepeatOf了。由它来接收一个可迭代的对象。

最后显示的效果图:

4.png

运行结果的话和*ngFor没有区别。但是功能肯定是欠缺的,如果有能力的小伙伴可以去阅读*ngFor的源码:*ngFor的源码。

总结

通过这篇文章,我们知道了let-变量这个模板输入变量是通过模板的上下文对象中定义并获取值的。然后想要设置上下文对象的话需要通过createEmbeddedView方法的第二个参数来设置。

结语

但是我总觉得了解的还不够透彻,我总觉得设置模板的上下文对象可能不只是createEmbeddedView这一种方法,但是我并没有找到其他的方法。如果各位小伙伴有知道其他的方法可以留言告诉我。

参考资料:

这篇文章灵感来自:Angular 实现一个"repeat" 指令

更多编程相关知识,请访问:编程视频!!

以上就是详解Angular中的模板输入变量(let-变量)的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

Angular cli是什么以及如何安装

聊聊Angular中的模板输入变量(let-变量)

浅谈Angular组件的交互方式

10个从喜到悲的Angular面试题

浅谈Angular中的模块(ngmodule),延迟加载模块

解决Angular中的浏览器兼容性问题的方法介绍

深入了解Angular中的pipe(管道)

了解一下Angular中的@input()和@output()

浅谈Angular中rxjs如何映射数据操作

浅谈Angular10配置@路径别名的方法

更多相关阅读请进入《Angular》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...