- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在使用 Angular Material Drag N Drop CDK 将一组默认项目(列表 1)移动到动态项目列表(列表 2)。当我将默认项目 (L1) 拖到动态项目 (L2) 中,然后更新现在的动态项目(New L2 Items)时,它也会更新默认项目(Old L1 Item)。
当您将默认项 (L1) 拖到动态项 (L2) 时,默认列表 (L1) 会使用 resetList 方法重置回其原始数组。我的目标是更新现在的动态项目(新 L2 项目)并可能将相同的默认项目(已重置的旧 L1 项目)拖到动态列表 (L2) 中,创建另一个新的动态项目(另一个新的 L2 项目)。我遇到的问题是,当我将默认项 (L1) 拖到动态列表 (L2) 中时,然后将新的动态项(使用 ngModel 的新 L2 项)更新为被拖动并重置的默认项(旧 L1 项)也有更新。
这是我在 form.component.html 中的 html
<!-- Default Answer List - List 1 -->
<aside cdkDropList id="defaultAnswerList"
[cdkDropListConnectedTo]="['dynamicAnswerList']" [cdkDropListData]="defaultAnswers">
<div class="aside-container">
<div class="auto-complete-content-area p-10">
<div *ngFor="let answer of defaultAnswers">
<!-- answer.isInput - Text Input -->
<div class="element-wrapper addon-group" *ngIf="answer.isInput" cdkDrag>
<div class="label-side">
Short Text
</div>
<div class="element-side">
<input type="text" [(ngModel)]="answer.placeholderText" class="input-element"
placeholder="Placeholder" />
<label>Drag to add a short text answer</label>
</div>
</div>
</div>
</div>
</aside>
<!-- Dynamic Answer List - List 2-->
<div class="input-answers" cdkDropList id="dynamicAnswerList"
(cdkDropListDropped)="dropIt($event)" [cdkDropListData]="dynamicAnswers">
<div class="input-section" cdkDragLockAxis="y" style="cursor: all-scroll" *ngFor="let answer of dynamicAnswers; index as i"
cdkDrag>
<div class="input-wrapper" *ngIf="answer.isInput || answer.isAddressSearch || answer.isAgeInput || answer.isVehicleVIN">
<input type="text" class="input-box normal-input-box" [(ngModel)]="answer.placeholderText"
placeholder="Add Text Placeholder" />
</div>
</div>
</div>
这是我的 form.component.ts 文件
// Here is the original array which is then set to defaultAnswers
defaultAnswersOrigin: Answer[] = [
{isInput: true, placeholderText: "Enter Placeholder", hasPrefix: false, hasSuffix: false, prefixText: "", suffixText: "", width: "45", position: 0},
{isDatePicker: true, placeholderText: "Enter Date Placeholder", hasPrefix: false, hasSuffix: false, prefixText: "", suffixText: "", width: "45", position: 1},
{isSelect: true, placeholderText: "Enter Menu Placeholder", hasPrefix: false, hasSuffix: false, prefixText: "", suffixText: "", width: "45", position: 2},
{isTextarea: true, secondaryPlaceholderText: "Enter Text Placeholder", hasSecondaryPlaceholder: true, hasPrefix: false, hasSuffix: false, prefixText: "", suffixText: "", width: "45", position: 3},
{isCheckbox: true, displayValue: "", hasPrefix: false, hasSuffix: false, prefixText: "", suffixText: "", width: "45", position: 4},
{isButton: true, placeholderText: "", hasPrefix: false, hasSuffix: false, prefixText: "", suffixText: "", displayValue: "Enter Button Text", width: "45", position: 5},
{isPrevNextButtons: true, placeholderText: "", hasPrefix: false, hasSuffix: false, prefixText: "", suffixText: "", displayValue: "", width: "90", position: 6},
{isProgressButton: true, placeholderText: "", hasPrefix: false, hasSuffix: false, prefixText: "", suffixText: "", displayValue: "", width: "90", position: 7}
];
defaultAnswers = this.defaultAnswersOrigin;
answers: Answers = [];
// Drop it method used in html
dropIt(event: CdkDragDrop<string[]>) {
if (event.previousContainer !== event.container) {
transferArrayItem(this.defaultAnswers,
this.answers,
event.previousIndex,
event.currentIndex);
this.answers.forEach((answer, i) => {
answer.position = i;
});
this.resetList();
} else if (event.previousIndex !== event.currentIndex) {
if (event.previousContainer === event.container) {
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
}
}
}
// Reset list method used
resetList() {
this.defaultAnswers = [];
setTimeout(() => {
this.defaultAnswers = this.defaultAnswersOrigin.slice();
}, 0);
}
我希望能够使用 ngModel 将项目从 L1 拖到 L2 并成功更新它。在这个特定的用例中,我想更改占位符,它是 Answer 类中的一个参数。
实际发生的是,来自 L1 的项目和来自 L2 的新项目都更新,就好像它们绑定(bind)到相同的参数一样。因此,我无法在不更改 L1 的情况下从 L2 更新项目。如果我再次将 L1 中的相同项目添加到 L2(我可以这样做,因为列表已重置),所有三个项目(L1、L2 New 和第二个 L2 New)都将使用 ngModel 进行更新。
*********更新 - 重制 STACKBLITZ我能够在 stackblitz 中重现错误。您可能需要刷新页面才能使拖放功能生效。
Steps to reproduce:
1. go to url below
2. Drag a Short Text item from Default List into Dynamic List
3. Start changing the new items placeholder in Dynamic List
4. Notice how placeholder in reset Default list is changing as well
5. Add same item from Default list to Dynamic list again
6. Change placeholder of new item
7. Notice how all three placeholders change now
https://stackblitz.com/edit/cdk-drag-and-drop-q7qqvo
最佳答案
您需要创建原始项目的副本,然后将副本添加到第二个列表。复制对象的方法有很多,但基本上是这样的:
function createCopy(orig){
return JSON.parse(JSON.stringify(orig))
}
关于javascript - 如何将一个数组项传输到另一个数组并使用 Angular Material Drag n Drop CDK 更新它,而无需两个项目都绑定(bind)到相同的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54736619/
我正在尝试使Polymer Dart元素可拖动,并与列表中的另一个项目交换信息。我最近的尝试是使用元素。我正在使用由trackstart,track和trackend的此元素创建的事件。我可以触发它们
我正在使用 Windows 窗体在 C# 中构建桌面应用程序。我有一个自定义控件,我希望能够将它拖放到我的应用程序中(而不是外部)。现在我正在使用通常的 DoDragDrop/OnDragOver/O
我有一个#topleft红色标题栏,其中包含多个“选项卡”按钮,这些按钮应填充除#topright蓝色块之外的所有可用空间。 在#topleft的红色背景上单击并拖动,可以移动 Electron 主窗
我希望能够移动(在灰色背景上,通过拖放)Bootstrap 2 提供的模态表单。谁能告诉我实现此目的的最佳实践是什么? 最佳答案 默认情况下, Bootstrap 不附带任何拖放功能,但您可以添加一些
我只想在屏幕上拖动小部件,而不是拖放。 但是,每当我离开它并再次开始拖动时,它就会从开始的位置开始被拖动。就好像它被重置了。 我的猜测是构建被一次又一次地调用,所以它自动使用原始位置值。我该如何解决?
我只想在屏幕上拖动小部件,而不是拖放。 但是,每当我离开它并再次开始拖动时,它就会从开始的位置开始被拖动。就好像它被重置了。 我的猜测是构建被一次又一次地调用,所以它自动使用原始位置值。我该如何解决?
我试图在拖放过程中更改节点上的光标,但图像没有改变。我打电话 setCursor()在 DragDetectedEventHandler我的节点。我也试过调用 getParent().setCurso
这个问题已经有答案了: D3.js: Remove force.drag from a selection (3 个回答) 已关闭 7 年前。 我将以下内容附加到 svg 元素 var dragger
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
使用 jsTree 3.0.8 我想允许在树中拖放节点,但它应该只允许通过拖动特定按钮或“拖动 handle ”而不是默认的操作来启动该操作允许拖动行上任意位置的行为。 我通过 Html 填充我的树,
当元素开始被拖动时,我需要修改它。 “开始”回调有两个参数,只有第一个参数对我有用。交易是我正在使用 helper: 'clone' 这使得 event.originalTarget 仅指向“原始”元
我有一个可拖动的 img 元素。现在我想手动触发 drag() 事件,就像我们如何触发 'click' 事件一样 $(element).trigger('click')。谢谢。 这是我的函数定义 $(
这是我的 jsfiddle 代码: http://jsfiddle.net/SMqR9/16/ 您会注意到,在 IE7 中,当您向上拖动一个元素时,它在放置之前一直可见。但是,如果您向下拖动一个元素,
我是 knockout JavaScript 的新手。在我的元素中,我使用了 Knockout 拖放功能。最初我有两个部门,一个是可见的,另一个没有属性显示。当我执行拖动输入功能时,我需要隐藏第一个分
上下文:如下面jsp内输入框中的代码所示,要拖放“fruitTree”中的水果节点。 这在拖放时成功发生。每次我从fruitTree中拖放水果时,先前拖放的水果节点都会被新拖放的水果覆盖。 问题:现在
我想移动一定距离。但是,在我的系统中,存在惯性/拖动/负加速度。我正在使用这样的简单计算: v = oldV + ((targetV - oldV) * inertia) 将其应用于多个帧会使运动“上
我正在使用 Kendo Grid UI。下面是一个相同的例子。 Grid / Column resizing
我有这个页面,我只能在浏览器中访问。有一个HTML元素仅在拖放过程中存在,并且我想在Inspector / Firebug中获取/分析其HTML代码。但是一旦我停止拖动,该元素就会被删除。 有什么方法
这真杀了我。我不小心将文件拖到其他位置时遇到问题。与其他编辑器相比,在vscode中,我似乎更经常为此受害。是否有任何插件,设置或其他使我无法使用鼠标技能的东西? 最佳答案 我有同样的问题。当文件夹意
//The following game has been designed as an educational resource //for Key Stage 1 and 2 children.
我是一名优秀的程序员,十分优秀!