成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_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国内精品久久久久久久
久久av最新网址| 欧美一激情一区二区三区| 欧美日韩aaaaaa| 五月天激情小说综合| 日韩天天综合| 国产精品青草久久| 国产成人精品网址| 欧美性极品少妇| 蜜臀精品久久久久久蜜臀| 久久一二三四| 天天亚洲美女在线视频| 国产欧美三级| 亚洲黄色av一区| 99视频在线精品国自产拍免费观看| 国产精品欧美一区喷水| 色综合久久中文字幕| 精品国产一区二区三区av性色| 狠狠色丁香久久婷婷综合丁香| 欧美三级视频在线| 久久99久国产精品黄毛片色诱| 欧美视频在线观看一区| 蜜桃精品在线观看| 久久av在线| 日本在线观看不卡视频| 在线观看日韩毛片| 国内精品嫩模私拍在线| 欧美日韩国产乱码电影| 韩国在线一区二区| 欧美日韩视频专区在线播放| 麻豆专区一区二区三区四区五区| 日本精品裸体写真集在线观看| 日本欧美大码aⅴ在线播放| 色呦呦国产精品| 老司机免费视频一区二区| 欧美最猛黑人xxxxx猛交| 麻豆精品久久精品色综合| 在线看不卡av| 国产一区二区成人久久免费影院| 欧美精品久久一区| 成人不卡免费av| 2024国产精品| 欧美日韩视频一区二区三区| 国产精品欧美极品| 亚洲高清网站| 亚洲一区二区中文在线| 色综合久久久久久久久| 精品一区二区三区免费观看| 精品美女一区二区三区| 亚洲欧美综合一区| 一区二区三区四区乱视频| 一本色道久久综合亚洲精品按摩| 人人狠狠综合久久亚洲| 欧美日韩国产免费| 成人激情动漫在线观看| 国产欧美日本一区二区三区| 一本色道久久综合亚洲精品高清 | 《视频一区视频二区| 日韩一级网站| 免费成人在线观看| 欧美大白屁股肥臀xxxxxx| 欧美高清日韩| 亚洲国产精品一区二区www| 91传媒视频在线播放| 粉嫩aⅴ一区二区三区四区| 久久久亚洲午夜电影| 91久久中文| 日本91福利区| 亚洲精品在线网站| 亚洲区第一页| 捆绑紧缚一区二区三区视频| 精品乱人伦一区二区三区| 狠狠色综合网| 日日摸夜夜添夜夜添精品视频| 777a∨成人精品桃花网| 欧美久久久久久| 天堂av在线一区| 日韩欧美一二三四区| 国产精品99一区二区| 午夜伊人狠狠久久| 日韩欧美国产一区二区三区 | 国内精品久久久久国产盗摄免费观看完整版 | 1024亚洲| 久草精品在线观看| 国产色产综合产在线视频| 免费视频一区| 大美女一区二区三区| 亚洲激情中文1区| 欧美男人的天堂一二区| 欧美三级网页| 免费成人美女在线观看.| 久久久精品欧美丰满| 久久精品国产99精品国产亚洲性色| 国产乱子轮精品视频| 中文字幕一区二区三区蜜月| 91高清在线观看| 欧美午夜精彩| 久久精品久久久精品美女| 国产精品免费人成网站| 色悠久久久久综合欧美99| 91蜜桃视频在线| 日韩在线播放一区二区| 久久久久88色偷偷免费| 91福利精品视频| 欧美日韩日本国产亚洲在线| 九九视频精品免费| 亚洲欧美激情在线| 欧美成人在线直播| 久久伊人亚洲| 狠狠色狠狠色综合日日tαg| 国内精品在线播放| 国产精品成人免费精品自在线观看| 欧美在线一区二区| 欧美日韩爆操| 激情久久久久久久久久久久久久久久| 17c精品麻豆一区二区免费| 日韩美一区二区三区| 色吊一区二区三区| 亚洲一级网站| 成人丝袜18视频在线观看| 丝袜美腿亚洲色图| 中文字幕一区二区日韩精品绯色| 在线不卡一区二区| 国产亚洲在线观看| 欧美阿v一级看视频| 国产美女精品在线| 婷婷丁香激情综合| 亚洲欧洲国产日韩| 欧美一区二区黄| 久久蜜桃资源一区二区老牛| 欧美日韩在线精品| 成人晚上爱看视频| 美女视频黄频大全不卡视频在线播放| 一区在线观看视频| 欧美大度的电影原声| 色婷婷综合五月| 99亚洲一区二区| 国产精品va| zzijzzij亚洲日本少妇熟睡| 精一区二区三区| 五月综合激情网| 日韩伦理av电影| 久久久午夜电影| 日韩欧美专区在线| 欧美午夜寂寞影院| 每日更新成人在线视频| 在线视频观看日韩| 欧美日本一区二区视频在线观看 | 在线观看视频一区二区欧美日韩| 亚洲日本视频| 欧美一区二区三区在线免费观看| 国产一区二区三区香蕉| 免费欧美在线视频| 日韩成人一级大片| 亚洲一级二级三级| 亚洲三级在线免费| 国产精品系列在线| 久久看人人爽人人| 91精品久久久久久蜜臀| 欧美在线观看一区| 色综合久久久久久久久| 久久精彩视频| 香蕉av777xxx色综合一区| 尤妮丝一区二区裸体视频| 91啪九色porn原创视频在线观看| 国产成人免费视频一区| 精品一区二区免费视频| 免费三级欧美电影| 青青青伊人色综合久久| 日韩av高清在线观看| 亚洲va韩国va欧美va| 曰韩精品一区二区| 亚洲精品ww久久久久久p站| 亚洲人妖av一区二区| 国产精品人妖ts系列视频| 日本一二三不卡| 国产日韩欧美一区二区三区综合| 欧美精品一区二区三区久久久| 欧美videos中文字幕| 欧美电影免费观看完整版| 欧美一级久久久| 日韩欧美在线网站| 欧美videos中文字幕| 久久一夜天堂av一区二区三区| 日韩精品一区二区三区在线观看| 91麻豆精品国产91久久久久久久久| 在线电影一区二区三区| 日韩三级高清在线| 日韩免费在线观看| 精品久久久久久久久久久久包黑料 | 欧美三级小说| 午夜日韩电影| 欧美天堂亚洲电影院在线观看| 欧美久久影院| 亚洲国产精品www| 国产亚洲一区在线播放| 一本大道久久a久久综合| 欧美三级视频在线播放| 日韩三级中文字幕| 久久九九久精品国产免费直播| 国产精品青草综合久久久久99|