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

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

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

瀏覽:330日期: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久久,三上悠亚国产精品一区二区三区
欧美一区激情| 91欧美精品| 国产成人精品三级高清久久91| 国产日韩一区二区三区在线播放| 日韩精品欧美大片| 日韩精品电影一区亚洲| 日韩国产欧美三级| 免费人成在线不卡| 日韩综合一区二区| 久久精品97| 国产精品第一| 国产一区二区亚洲| 四虎4545www国产精品| 激情六月综合| 六月天综合网| 国产亚洲精品美女久久久久久久久久| 国产精品一站二站| 国产成人免费| 久久蜜桃av| 久久电影一区| 国产精品成人**免费视频| 国产999精品在线观看| 91日韩免费| 欧美va天堂在线| 免费在线观看视频一区| 日本欧美韩国一区三区| 精品一区91| 亚洲午夜91| 欧美三区不卡| 97精品97| 亚洲一区成人| 国产精品最新| 久久久久蜜桃| 亚洲日本免费电影| 免费在线观看一区| 99久久久久国产精品| 亚洲精品日本| 国产色噜噜噜91在线精品| 麻豆国产在线| 亚洲久久在线| 欧美国产一级| 亚洲午夜国产成人| 国产精品国产三级国产在线观看| 欧美1区免费| 国产日韩亚洲欧美精品| av一区在线| 日韩有吗在线观看| 水蜜桃精品av一区二区| 亚洲视频二区| 成人精品国产亚洲| 一区二区国产在线| 国产一二在线播放| 香蕉久久久久久久av网站| 精品无人区麻豆乱码久久久| 国产美女精品| 麻豆视频在线看| 亚洲1区在线观看| 青青青免费在线视频| 蜜臀久久99精品久久久久宅男| 国产黄色一区| 99香蕉国产精品偷在线观看| 精品视频在线你懂得| 日韩精品一级二级 | 青草久久视频| 欧美福利在线| 日韩88av| 免费日韩一区二区三区| 视频一区视频二区中文| 人人香蕉久久| 精品一区二区三区亚洲 | 在线视频观看日韩| 成人午夜毛片| 欧美极品一区二区三区| 日韩欧美激情| 亚洲色诱最新| www.九色在线| 国产91欧美| 欧美交a欧美精品喷水| 蜜臀av性久久久久蜜臀aⅴ流畅 | 精品视频高潮| 欧美日韩夜夜| av亚洲在线观看| 卡一卡二国产精品| 中文字幕av一区二区三区人 | 国语精品一区| 鲁大师影院一区二区三区| 精品国产亚洲一区二区三区在线| 影音先锋久久| 日韩中文影院| 欧美国产极品| 国产经典一区| 日本国产一区| 日韩在线观看一区二区| 香蕉成人av| 免费视频一区二区三区在线观看 | 日韩精品一区二区三区免费视频| 日韩精品不卡一区二区| 国产欧美自拍一区| 日本一区二区三区中文字幕| 老牛影视一区二区三区| 激情欧美国产欧美| 日韩在线观看一区| 免费在线观看一区| 欧美午夜三级| 在线国产日韩| 在线亚洲国产精品网站| 秋霞国产精品| 日韩啪啪电影网| 99视频精品视频高清免费| 蜜桃久久久久| 亚洲精品自拍| 国产亚洲永久域名| 999精品在线| 99久久精品网| 桃色av一区二区| 欧美激情国产在线| 四季av一区二区凹凸精品| 青青青免费在线视频| 国产精品13p| 高清av一区| 美女精品一区二区| 麻豆久久久久久| 久久av免费| 美女av一区| 国产suv精品一区二区四区视频| 日本欧美一区二区| 日韩国产成人精品| 国产日韩1区| 欧美激情福利| 中文字幕系列一区| 999国产精品永久免费视频app| 日韩黄色大片网站| 国产亚洲一区二区手机在线观看| 一本大道色婷婷在线| 亚洲爱爱视频| 欧美日韩中文一区二区| 欧洲激情综合| 视频在线观看一区| 国产精品一区二区三区www| 国产精品主播在线观看| 欧美日韩亚洲一区在线观看| 欧美一级一区| 国产精品白丝久久av网站| 精品美女在线视频| 一区二区精品伦理...| 欧美日韩一二| 免费观看不卡av| 丝袜诱惑制服诱惑色一区在线观看| 亚洲欧美日本视频在线观看| 免费看日韩精品| 欧美午夜三级| 国产一区二区久久久久| 亚洲天堂1区| 噜噜噜久久亚洲精品国产品小说| 亚洲色图网站| 综合欧美亚洲| 97国产成人高清在线观看| 婷婷国产精品| 亚洲精选91| 欧美精品不卡| 欧美日韩免费观看视频| 亚洲综合丁香| 欧美视频一区| 水蜜桃精品av一区二区| 一区二区三区国产在线| 久久精品网址| 免费国产自久久久久三四区久久 | 久久国产欧美日韩精品| 久久久久97| 国产欧美一区二区三区精品酒店| 午夜久久黄色| 亚洲女同一区| 色乱码一区二区三区网站| 不卡视频在线| 国产精品乱战久久久| 欧洲毛片在线视频免费观看| 91精品日本| 久久中文字幕二区| 久久国产三级精品| 最近高清中文在线字幕在线观看1| 久久久久久美女精品| 热久久久久久| 91成人网在线观看| 国产欧美在线| 九色精品91| 国产日韩欧美一区二区三区 | 亚洲久久在线| 日韩久久精品| 日韩激情一区二区| 欧美二三四区| 免费人成在线不卡| 久久一区精品| 日韩午夜一区| 美女视频黄 久久| 久久av一区| 91欧美国产| 91成人精品观看| 国产精品av一区二区| 免费在线播放第一区高清av| 免费观看在线综合|