日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Angular獲取ngIf渲染的Dom元素示例

瀏覽:333日期:2022-06-10 08:36:00
目錄
  • Angular獲取普通Dom元素的方法
    • 通過模板變量名獲取
    • 將static改成false 獲取
  • 自己實現的思路
    • 通過cdkDragData 把拖拽的元素的value,id等值帶上

Angular獲取普通Dom元素的方法

通過模板變量名獲取

import { Component, ViewChild, AfterViewInit } from "@angular/core";
@Component({
? selector: "my-app",
? template: `
? ? <h1>Welcome to Angular World</h1>
? ? <p #greet>Hello {{ name }}</p>
? `,
})
export class AppComponent {
? name: string = "Semlinker";
? @ViewChild("greet")
? greetDiv: ElementRef;
? ngAfterViewInit() {
? ? console.log(this.greetDiv.nativeElement);
? }
}

但我發現用這種方法獲取ngIf渲染的元素時得到的是undefined

<div *ngIf="isButtnGrop" (click)="dropBtnClick($event)">
  <div cdkDropList #dropList [cdkDropListConnectedTo]="_connectableDropLists" (cdkDropListDropped)="drop($event)">
    <div *ngFor="let item of itemDatas" (click)="onItemClick($event,item)" cdkDrag
      (cdkDragStarted)="startDragging($event)" [cdkDragData]="{ item }">
    </div>
  </div>
</div>

將static改成false 獲取

@ViewChild("dropList", { read: CdkDropList, static: false }) dropList: CdkDropList;
ngAfterViewInit(): void {
? ? if (this.dropList) {
? ? ? console.log(this.dropList)
? ? }
? }

通過這個也是實現了一個buttonGroup拖拽button到 列表的功能,列表的button也能拖拽到 buttonGroup
用的也是Angular自帶的 cdk/drag-drop

import { CdkDragDrop, CdkDropList, moveItemInArray } from "@angular/cdk/drag-drop";

自己實現的思路

官網的文檔和demo比較簡單,沒有講到跨組件的實現,簡單記錄一下自己實現的思路。

將需要拖拽的元素加入cdkDropList,并且在A組件和B組件都初始化的時候獲取到需要拖拽的dom元素,將他們各自注冊到store中,帶上特殊的componentId。

A、B組件加上cdkDropListConnectedTo 這決定著組件可以跨組件拖動到哪里,用_connectableDropLists變量。同樣的,在頁面初始化時,通過rxjs的流訂閱特殊的componentId,去獲取到當有拖拽list注冊到store中時的變化,并且賦值給_connectableDropLists數組。

const parentId = this.storeService.getProperty(this.pageId, this.componentId, "parentId");
this.dragDropService.getDragListsAsync(this.pageId, parentId.value)
? ? ? .pipe(takeUntil(this.destroy))
? ? ? .subscribe(dropLists => {
? ? ? ? this._connectableDropLists = dropLists || [];
? ? ? });
this.storeService.getPropertyAsync(this.pageId, this.componentId, "children")
? ? ? .pipe(takeUntil(this.destroy)).subscribe(result => {
? ? ? ? if (!result || result.length === 0) {
? ? ? ? ? this._children = [];
? ? ? ? ? this._dragData = [];
? ? ? ? ? this.changeRef.markForCheck();
? ? ? ? } else {
? ? ? ? ? const dropbuttonArray = result.filter((item) => {
? ? ? ? ? ? const itemType = this.storeService.getProperty(this.pageId, item, "componentType");
? ? ? ? ? ? if (itemType === AdmComponentType.DropdownButton) return item;
? ? ? ? ? });
? ? ? ? ? if (dropbuttonArray.length > 0) {
? ? ? ? ? ? this._connectableDropLists = [];
? ? ? ? ? ? dropbuttonArray.forEach(comId => {
? ? ? ? ? ? ? this.dragDropService.getDragListsAsync(this.pageId, comId)
? ? ? ? ? ? ? ? .pipe(takeUntil(this.destroy))
? ? ? ? ? ? ? ? .subscribe(dropLists => {
? ? ? ? ? ? ? ? ? this._connectableDropLists.push(...dropLists);
? ? ? ? ? ? ? ? });
? ? ? ? ? ? });
? ? ? ? ? }
? ? ? ? }
? ? ? });

因為A組件是B組件的父級,所以需要通過當前組件id獲取到父級id,再獲取到拖拽元素

通過cdkDragData 把拖拽的元素的value,id等值帶上

通過(cdkDropListDropped)="drop($event)",注冊拖拽結束的回調事件

drop回調事件處理拖拽結束后的數據處理,這里涉及到項目低代碼的一些組件數據處理,大致是刪除oldParent children, 然后新的parent節點加上,再更改當前組件的parent節點。同時這里涉及到buttongroup下面的button本身也可以互相拖拽的處理,所以也需要一層判斷來特殊處理。

drop(event: CdkDragDrop<any>) {
? ? if (event.previousContainer != event.container) {
? ? ? const { eventData } = event.item.data;
? ? ? const componentId = eventData[event.previousIndex];
? ? ? const oldParentId = this.storeService.getProperty(this.pageId, componentId, "parentId", false)?.value;
? ? ? // delete oldParent children
? ? ? const oldParent = this.storeService.getProperties(this.pageId, oldParentId);
? ? ? const index = oldParent.children.indexOf(componentId);
? ? ? oldParent.children.splice(index, 1);
? ? ? // add newParent children
? ? ? const oldChildren = this.itemDatas.map(x => x.id.value);
? ? ? oldChildren.splice(event.currentIndex, 0, componentId);
? ? ? this.storeService.setProperty(this.pageId, componentId, "parentId", { value: this.componentId }, [[this.pageId, componentId]]);
? ? ? this.storeService.setProperty(this.pageId, oldParentId, "children", oldParent.children, [[this.pageId, oldParentId]]);
? ? ? this.storeService.setProperty(this.pageId, this.componentId, "children", oldChildren);
? ? ? this.changeDetector.markForCheck();
? ? ? return;
? ? }
? ? moveItemInArray(this.itemDatas, event.previousIndex, event.currentIndex);
? ? const children = this.itemDatas.map(x => x.id.value);
? ? this.storeService.setProperty(this.pageId, this.componentId, "children", children);
? }

這樣子組件和父組件的內部元素互相拖拽,也就能實現了

以上就是Angular獲取ngIf渲染的Dom元素示例的詳細內容,更多關于Angular獲取ngIf渲染的資料請關注其它相關文章!

標簽: JavaScript
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国内揄拍国内精品久久| 狠狠干成人综合网| 亚洲aa在线| 日韩中文欧美在线| 视频一区二区欧美| 蜜桃视频欧美| 亚洲福利免费| 最新亚洲激情| 视频在线观看国产精品| 亚洲另类黄色| 国产探花一区| 精品色999| 蜜桃精品在线| 蜜桃国内精品久久久久软件9| 国产精品99一区二区| 国产手机视频一区二区| 蜜臀久久99精品久久久画质超高清| 免费人成网站在线观看欧美高清| 亚洲3区在线| 欧美亚洲二区| 国产精品巨作av| 中文在线а√天堂| av亚洲免费| 免费黄网站欧美| 欧美欧美黄在线二区| 九九九精品视频| 日韩另类视频| 亚洲欧美网站| 国产情侣久久| 理论片午夜视频在线观看| 欧美日韩在线网站| 日本大胆欧美人术艺术动态| 日韩福利视频导航| 黄色精品视频| 伊人久久亚洲美女图片| 亚洲我射av| 久久影院一区二区三区| 亚洲人成在线网站| 一区免费视频| 国产免费播放一区二区| 欧洲av不卡| 亚洲精品九九| 久久久久久一区二区| 国产精品老牛| 国产精品magnet| 激情丁香综合| 日本午夜免费一区二区| 日本蜜桃在线观看视频| 亚洲激情二区| 国产欧美一区二区三区精品观看| 成人午夜亚洲| 久久亚洲精品伦理| 久久精品国产99| 在线视频日韩| 国产一区二区三区四区| 美女网站久久| 久久青青视频| 爽爽淫人综合网网站| 国产精品久一| 夜夜嗨网站十八久久| 久久av网站| 香蕉精品999视频一区二区| 久久超级碰碰| aⅴ色国产欧美| 精品视频自拍| 怡红院精品视频在线观看极品| 国产精品传媒麻豆hd| 日韩一级网站| 欧美黑人巨大videos精品| 伊人影院久久| 手机在线电影一区| 亚洲深夜福利在线观看| 麻豆网站免费在线观看| 91欧美极品| 91成人精品视频| 精品美女在线视频| 中文字幕日韩亚洲| 久久婷婷av| 麻豆精品国产91久久久久久| 美女国产一区| 捆绑调教日本一区二区三区| 欧美亚洲网站| 石原莉奈在线亚洲二区| 欧美日韩国产观看视频| 国产欧美日韩精品高清二区综合区 | а√天堂8资源中文在线| 日韩av专区| 亚洲一区日韩在线| 国产精品久久久久久久久免费高清| 桃色一区二区| 麻豆精品视频在线观看免费| 少妇精品久久久一区二区三区| 欧美日韩水蜜桃| 国产成人精品三级高清久久91 | 国产亚洲毛片| 欧美日韩精品免费观看视欧美高清免费大片 | 精品精品国产三级a∨在线| 一区二区国产在线| 99精品网站| 福利一区和二区| 欧美专区一区| 婷婷亚洲成人| 99在线精品免费视频九九视| 青青久久av| 麻豆久久久久久| 日本麻豆一区二区三区视频| 欧美一级专区| 欧美福利在线| 久久久久国产精品一区三寸| 日韩欧美字幕| 国产伦久视频在线观看| 美女性感视频久久| 国产午夜精品一区在线观看| 四虎精品一区二区免费| 奶水喷射视频一区| 不卡在线一区二区| 国产在线|日韩| 狠狠躁少妇一区二区三区| 欧美国产极品| 欧美91在线| 久久99性xxx老妇胖精品| 色婷婷成人网| 蜜臀久久久久久久| 亚洲精品韩国| 视频一区中文字幕精品| 免费看日韩精品| 久久亚洲欧美| 久久国产99| 麻豆91精品| 日韩一区精品字幕| 免播放器亚洲| 91综合网人人| 成人黄色av| 91欧美日韩| 久久久噜噜噜| 欧美特黄一区| 免费看欧美美女黄的网站| 人人精品人人爱| 亚洲另类av| 日本视频中文字幕一区二区三区| 日韩av网站免费在线| 国产麻豆一区二区三区| 国产情侣久久| 久久精品国产免费| 日韩不卡一区| 亚洲成人不卡| 精品日韩毛片| 视频一区二区欧美| 亚洲不卡视频| 欧美国产极品| 丝袜诱惑一区二区| 欧美理论视频| 综合激情五月婷婷| 亚洲深夜影院| 日本中文字幕视频一区| 国产精品伊人| 国产成人精品999在线观看| 精品一区二区三区四区五区| www.51av欧美视频 | 欧美交a欧美精品喷水| 精品免费av| 国产麻豆久久| 国产一区二区高清| 日韩黄色免费网站| 欧美黑人巨大videos精品| 日韩在线综合| 午夜欧美在线| 91亚洲无吗| 日韩久久精品网| 日韩专区欧美专区| 国产精品久久久久久妇女| 日韩天堂在线| 喷白浆一区二区| 麻豆一区二区三区| 欧美日韩国产免费观看| 日本不卡的三区四区五区| 国产在视频一区二区三区吞精| 精品一区在线| 国产亚洲高清在线观看| 国产成人精品亚洲日本在线观看| 亚洲一区国产| 日本成人在线不卡视频| 欧美黑人做爰爽爽爽| 国产综合亚洲精品一区二| 日本免费一区二区视频| 在线精品亚洲欧美日韩国产| 国产精品视区| 精品久久视频| 日本大胆欧美人术艺术动态| 精品三区视频| 石原莉奈一区二区三区在线观看| 精品国产精品国产偷麻豆| 一区久久精品| 久久精品国产亚洲aⅴ| 99综合视频| 精品免费av一区二区三区| 久久精品国产大片免费观看| 国产乱码精品| 狠狠爱成人网| 麻豆精品新av中文字幕|