亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺析Angular 實(shí)現(xiàn)一個repeat指令的方法

 更新時間:2019年07月21日 10:38:20   作者:Mystic大蝦  
這篇文章主要介紹了Angular 實(shí)現(xiàn)一個repeat指令的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下

在項(xiàng)目中常常會使用 ngFor指令,之前只會使用它,具體如何實(shí)現(xiàn)的卻不得而知。終于這幾天有時間"研究"了下它是如何實(shí)現(xiàn)的,順便自己寫個簡單的 ngFor指令:repeat

說到指令就不得不提一下TemplateRefViewContainerRef

TemplateRef 可以理解為dom渲染模板,指令通過TemplateRef的模板來創(chuàng)建dom元素
ViewContainerRef 可以理解為TemplateRef的容器,在調(diào)用ViewContainerRef上的createEmbeddedView時,傳入TemplateRef和context就能創(chuàng)建出dom元素 此外還需要說明的是Angular的微語法,詳見下圖。

 

Angular會把微語法展開成ng-template的形式,支持傳入?yún)?shù), TemplateRef
所關(guān)聯(lián)的則是ng-template內(nèi)的內(nèi)容,let variable則是聲明變量,如果后面沒有賦值操作,則這個變量取默認(rèn)值。這里取值和createEmbeddedView方法的context相關(guān)(后面會細(xì)說)。

代碼示例:

import { Directive, Input, TemplateRef, ViewContainerRef } from "@angular/core";
@Directive({
 selector: "[appRepeat]"
})
export class RepeatDirective {
 constructor(private tpl: TemplateRef<any>, private vc: ViewContainerRef) {}
 @Input() set appRepeatIn(val: Array<any>) {
  val.forEach((item, index) => {
   this.vc.createEmbeddedView(this.tpl, {
    $implicit: item,
    index: index,
    even: index % 2 === 0,
    odd: index % 2 === 1
   });
  });
 }
}
<ul>
 <li
  *appRepeat="
   let item;
   in: items;
   let index = index;
   let even = even;
   let odd = odd;
   let defualt
  "
 >
  <ul class="{{ even ? 'even' : 'odd' }}">
   <li>index: {{ index }}</li>
   <li>item: {{ item }}</li>
   <li>default: {{ defualt }}</li>
   <li>even: {{ even }}</li>
   <li>odd: {{ odd }}</li>
  </ul>
 </li>
</ul>

通過上面的代碼可以知道:

let 聲明變量(index,even,odd)可以使用createEmbeddedView方法傳入context 的屬性值(index,even,odd)進(jìn)行賦值,如果只聲明了變量并無賦值操作,則會使用context的屬性值($implicit)進(jìn)行賦值。

keyExp 為 Directive 聲明Input屬性,Directive的Input屬性名格式為"[selector]key",遵循CamelCase命名規(guī)則,例如上面的例子:

selector: "appRepeat"
key: "in"

則命名為:"appRepeatIn"。

Directive 可以通過Input傳入的數(shù)據(jù)來進(jìn)行創(chuàng)建頁面視圖

總結(jié):通過本文可以知道在Angular中如何創(chuàng)建一個簡單的結(jié)構(gòu)指令,指令展開的微語法(展開形式,傳入數(shù)據(jù),賦值操作),使用createEmbeddedViewTemplateRef來創(chuàng)建dom元素。如有疑問,可以查看源代碼 或者在下面留言~

以上所述是小編給大家介紹的Angular 實(shí)現(xiàn)一個repeat指令的方法,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言小編會及時回復(fù)大家的!

相關(guān)文章

  • AngularJS動態(tài)綁定ng-options的ng-model實(shí)例代碼

    AngularJS動態(tài)綁定ng-options的ng-model實(shí)例代碼

    本篇文章主要介紹了AngularJS動態(tài)綁定ng-options的ng-model實(shí)例代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • AngularJS中實(shí)現(xiàn)動畫效果的方法

    AngularJS中實(shí)現(xiàn)動畫效果的方法

    本文主要介紹AngularJS 動畫,這里對動畫的資料詳細(xì)介紹并附有效果圖和代碼實(shí)例,有需要的小伙伴參考下
    2016-07-07
  • monaco?editor在Angular的使用詳解

    monaco?editor在Angular的使用詳解

    這篇文章主要為大家介紹了monaco?editor在Angular的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 在JavaScript的AngularJS庫中進(jìn)行單元測試的方法

    在JavaScript的AngularJS庫中進(jìn)行單元測試的方法

    這篇文章主要介紹了在JavaScript的AngularJS庫中進(jìn)行單元測試的方法,主要針對AngularJS中的控制器相關(guān),需要的朋友可以參考下
    2015-06-06
  • 詳解Angularjs 如何自定義Img的ng-load 事件

    詳解Angularjs 如何自定義Img的ng-load 事件

    本篇文章主要介紹了詳解Angularjs 如何自定義Img的ng-load 事件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Angular2下使用pdf插件的方法詳解

    Angular2下使用pdf插件的方法詳解

    這篇文章主要給大家介紹了在Angular2下使用pdf插件的方法,使用這個插件是要實(shí)現(xiàn)一個pdf顯示的功能,文中介紹的非常詳細(xì),對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-04-04
  • Angularjs中的ui-bootstrap的使用教程

    Angularjs中的ui-bootstrap的使用教程

    這篇文章主要介紹了Angularjs中的ui-bootstrap的使用教程,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • 詳解angular 中的自定義指令之詳解API

    詳解angular 中的自定義指令之詳解API

    本篇文章主要介紹了angular 中的自定義指令之詳解API,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 詳解Angular 4.x NgTemplateOutlet

    詳解Angular 4.x NgTemplateOutlet

    這篇文章主要介紹了詳解Angular 4.x NgTemplateOutlet,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • AngularJS過濾器詳解及示例代碼

    AngularJS過濾器詳解及示例代碼

    本文主要介紹AngularJS過濾器,這里整理了詳細(xì)的資料和提供了示例代碼及實(shí)例效果圖,有興趣的小伙伴可以參考下
    2016-08-08

最新評論