成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

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

Angular獲取普通Dom元素的方法

通過(guò)模板變量名獲取

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);
? }
}

但我發(fā)現(xiàn)用這種方法獲取ngIf渲染的元素時(shí)得到的是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)
? ? }
? }

通過(guò)這個(gè)也是實(shí)現(xiàn)了一個(gè)buttonGroup拖拽button到 列表的功能,列表的button也能拖拽到 buttonGroup
用的也是Angular自帶的 cdk/drag-drop

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

自己實(shí)現(xiàn)的思路

官網(wǎng)的文檔和demo比較簡(jiǎn)單,沒(méi)有講到跨組件的實(shí)現(xiàn),簡(jiǎn)單記錄一下自己實(shí)現(xiàn)的思路。

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

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

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);
? ? ? ? ? ? ? ? });
? ? ? ? ? ? });
? ? ? ? ? }
? ? ? ? }
? ? ? });

因?yàn)锳組件是B組件的父級(jí),所以需要通過(guò)當(dāng)前組件id獲取到父級(jí)id,再獲取到拖拽元素

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

通過(guò)(cdkDropListDropped)="drop($event)",注冊(cè)拖拽結(jié)束的回調(diào)事件

drop回調(diào)事件處理拖拽結(jié)束后的數(shù)據(jù)處理,這里涉及到項(xiàng)目低代碼的一些組件數(shù)據(jù)處理,大致是刪除oldParent children, 然后新的parent節(jié)點(diǎn)加上,再更改當(dāng)前組件的parent節(jié)點(diǎn)。同時(shí)這里涉及到buttongroup下面的button本身也可以互相拖拽的處理,所以也需要一層判斷來(lái)特殊處理。

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);
? }

這樣子組件和父組件的內(nèi)部元素互相拖拽,也就能實(shí)現(xiàn)了

以上就是Angular獲取ngIf渲染的Dom元素示例的詳細(xì)內(nèi)容,更多關(guān)于Angular獲取ngIf渲染的資料請(qǐng)關(guān)注其它相關(guān)文章!

標(biāo)簽: JavaScript
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日韩视频免费直播| 国产一区二区三区免费不卡| 视频一区视频二区中文字幕| 国产精品天美传媒| 久久久久99精品一区| 91一区二区三区在线观看| 国内精品久久久久影院一蜜桃| 免费观看91视频大全| 美女被吸乳得到大胸91| 美女网站色91| 国产精品18久久久久久久久| 国产成人av电影免费在线观看| 另类小说色综合网站| 日韩—二三区免费观看av| 欧美老肥妇做.爰bbww视频| 欧美在线短视频| 欧美一卡在线观看| 欧美电影免费观看高清完整版在线观看 | 亚洲私人影院在线观看| 亚洲欧美日韩在线播放| 亚洲一区二区五区| 91麻豆精品国产91久久久资源速度| 欧美一区二区日韩| 久久久99精品免费观看不卡| 中文字幕亚洲电影| 午夜久久久久久久久| 精品一区二区免费视频| eeuss鲁片一区二区三区在线看 | 欧美天天综合网| 精品日韩欧美在线| 国产精品传媒入口麻豆| 日韩精品五月天| 国产呦萝稀缺另类资源| 99re亚洲国产精品| 国产伦精品一区二区三区视频黑人| 91国偷自产一区二区三区观看| 欧美一级二级在线观看| 亚洲国产高清在线观看视频| 亚洲国产成人av网| 粉嫩久久99精品久久久久久夜| 91老师片黄在线观看| 久久激情综合| 久久久久久夜精品精品免费| 一个色综合av| www.99精品| 久久亚洲影院| 国产性色一区二区| 日韩va欧美va亚洲va久久| voyeur盗摄精品| 久久婷婷av| 欧美韩日一区二区三区| 日韩国产欧美三级| 欧美激情亚洲| 欧美日韩一区二区电影| 国产精品女主播在线观看| 精品一区中文字幕| 亚洲精品四区| xfplay精品久久| 久久精品二区亚洲w码| 亚洲婷婷在线| 日韩免费观看高清完整版 | 亚洲视频中文字幕| 国产精品一区专区| 久久国产精品露脸对白| 国产综合久久| 精品成人一区二区三区四区| 亚洲成人激情综合网| 一区二区三区高清不卡| www.亚洲激情.com| 欧美夫妻性生活| 午夜久久福利影院| 亚洲另类黄色| 亚洲国产精品成人综合 | 国内综合精品午夜久久资源| 欧美一级片在线看| 男人的j进女人的j一区| 日韩视频在线一区二区三区| 久久久久成人黄色影片| 高清成人在线观看| 欧美日韩国产中文| 日韩高清不卡一区| 免费视频一区二区三区在线观看| 中文字幕欧美日韩一区| jvid福利写真一区二区三区| 在线电影欧美成精品| 日韩国产欧美在线播放| 国产一区二区三区奇米久涩 | 国产精品白丝av| 欧美色综合网站| 男男gaygay亚洲| 色综合久久天天| 视频精品一区二区| 亚洲欧美日韩另类精品一区二区三区| 欧美国产精品一区二区| hitomi一区二区三区精品| 精品少妇一区二区三区日产乱码 | 成人精品免费看| 日韩免费在线观看| 成人午夜电影网站| 精品日韩在线观看| 91网站视频在线观看| 久久久综合激的五月天| 99r国产精品| 国产精品天干天干在观线| 欧美激情日韩| 亚洲视频免费在线| 99精品国产福利在线观看免费| 亚洲欧美偷拍另类a∨色屁股| 在线免费观看一区二区三区| 中文字幕一区二区三区乱码在线 | 欧美视频三区在线播放| 久久成人免费网| 欧美一区二区三区免费| 成人小视频在线| 国产欧美视频在线观看| 国产精品豆花视频| 亚洲制服欧美中文字幕中文字幕| 亚洲欧美日韩在线综合| 秋霞电影一区二区| 日韩一区二区在线观看视频| 成人免费视频caoporn| 国产欧美精品一区| 国产精品乱码| 理论电影国产精品| 精品捆绑美女sm三区| 欧美在线免费一级片| 日韩毛片视频在线看| 久久九九免费| 国产成人在线视频播放| 国产欧美一二三区| 久久精品国产清高在天天线| 黄色精品一二区| 国产女人18毛片水真多成人如厕| 99精品国产福利在线观看免费| 美女视频第一区二区三区免费观看网站| 欧美日韩国产一级片| 97久久久精品综合88久久| 综合久久一区二区三区| 欧美色综合天天久久综合精品| 国产色产综合产在线视频| 国产欧美日韩亚洲一区二区三区| 男女性色大片免费观看一区二区 | 4438成人网| 一区视频在线| 精品写真视频在线观看| 中文字幕二三区不卡| 欧美曰成人黄网| 欧美国产三区| 美洲天堂一区二卡三卡四卡视频| 久久久久久久久伊人| 免费日韩视频| 午夜精品一区二区三区四区| 视频一区二区中文字幕| 国产日韩精品久久久| 日本精品一区二区三区高清| 91在线porny国产在线看| 偷拍日韩校园综合在线| 久久久精品黄色| 欧美日韩高清不卡| 亚洲精品在线观看免费| 粉嫩av一区二区三区| 亚洲一本大道在线| 一本一本久久| 欧美fxxxxxx另类| 国产一区二区三区在线观看精品| 中文字幕一区二区三区乱码在线| 欧美绝品在线观看成人午夜影视| 精品99视频| 91在线看国产| 国内精品久久久久影院一蜜桃| 亚洲曰韩产成在线| 国产精品天美传媒| 日韩午夜av电影| 欧美日韩免费在线视频| 亚洲免费在线| 日韩av电影免费观看高清完整版| 中文字幕日韩一区二区| 精品日韩欧美在线| 欧美放荡的少妇| 在线视频欧美精品| 嫩草成人www欧美| 亚洲另类黄色| 狠狠色狠狠色综合人人| 不卡一区二区在线| 国产成人综合在线播放| 日韩电影在线观看电影| 亚洲一区二区三区在线看| 国产欧美日本一区视频| 日韩精品在线看片z| 99re在线精品| 99精品在线观看视频| 国产91富婆露脸刺激对白| 久久国产麻豆精品| 国内外成人在线| 男女男精品视频网| 蜜桃一区二区三区四区| 天天综合色天天综合色h| 亚洲国产日韩在线一区模特| 亚洲欧美日韩在线不卡| 椎名由奈av一区二区三区|