- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建一个标签列表,当你点击蓝色标签时,它会被添加到一个新数组并显示在上面,它在旧数组中应该是不可选择的,但它的位置是由 css 标记的,但是用户应该能够在新数组中单击它,它将返回到它在旧数组中的原始位置并从新数组中删除。我做了 a plunker with what I have done so far .
到目前为止,问题是当点击它时它被添加到新数组但它在旧数组中仍然是可点击的,所以多次点击它最终会向新数组添加重复值,我还需要功能如果用户在新数组中单击它会返回到旧数组中的原始位置。
这是 typescript 代码,供任何想在此处查看的人使用
//our root app component
import {Component, NgModule, VERSION} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
@Component({
selector: 'my-app',
template: `
<div>
<h2>Hello {{name}}</h2>
</div>
<p>
Current behaviour: user clicks the blue tag and it goes into the array displayed above.
user clicks already selected blue tag and it duplicated in array. wanted behaviour is that once selected
it goes into the new array and it is then unclickable in the blue tags part, but you can click it from the above part and
it will be visible and selectable in the blue part again
</p>
<p>
TLDR: click blue tag and goes into another array, click tag in new array and it goes back to the blue array
</p>
<ul>
<li>
<div class="c-seedContainer u-displayOnly">
<span *ngFor="let m of matchArray; let i = index">{{ m }}</span>
</div>
</li>
<li>
<div class="c-seedContainer u-selectionSeed">
<span [class.u-removeSeed]="stateOfButton[i]" (click)="changeState(i,c)" *ngFor="let c of cloneSeedArrayForSelection; let i = index">{{ c }}</span>
</div>
</li>
</ul>
`,
})
export class App {
name:string;
seed: Array<any> = [
"ice",
"hockey",
"rubbish",
"traitor",
"mneumonic",
"chronical",
"stuff",
"entity",
"poo",
"junk",
"mcDonalds",
"Fruit",
"going",
"sweet"
]
cloneSeedArray: Array<any> = [];
cloneSeedArrayForSelection: Array<any> = [];
selectedIdx = 0;
stateOfButton: boolean[];
matchArray: Array<any> = [];
constructor() {
this.name = `Angular! v${VERSION.full}`
}
changeState(index, seedWord) {
// a) click item to add / remove a class
// b) add item to a new array
// c) compare both arrays to ensure they match
// d) if both arrays dont match show warning and allow to recreate
// this.selectedIdx = index;
console.log("index " + index)
this.matchArray.push(seedWord)
this.stateOfButton[index] = !this.stateOfButton[index];
console.log("seedWord " + seedWord)
}
ngAfterViewInit() {
this.cloneSeedArray = this.seed.slice();
this.cloneSeedArrayForSelection = this.shuffleArray( this.cloneSeedArray )
this.stateOfButton = Array(this.cloneSeedArrayForSelection.length).fill(false);
this.cd.detectChanges();
}
shuffleArray(d) {
for ( let c = d.length - 1; c > 0; c--) {
let b = Math.floor(Math.random() * (c + 1));
let a = d[c];
d[c] = d[b];
d[b] = a;
}
return d
};
}
@NgModule({
imports: [ BrowserModule ],
declarations: [ App ],
bootstrap: [ App ]
})
export class AppModule {}
最佳答案
我会将您的数组映射到具有 selected
属性的对象数组。
这样我们就可以很容易地确定哪些元素应该显示在新数组中,哪些应该保留在旧数组中
ts
export class AppComponent {
seed = [
"ice",
...
];
items: Item[];
selectedItems: Item[] = [];
ngOnInit() {
this.items = this.shuffleArray(this.seed)
.map(x => ({ name: x, selected: false }));
}
select(item: Item) {
if (item.selected) {
return;
}
this.selectedItems.push(item);
item.selected = true;
}
unSelect(item: Item, idx: number) {
item.selected = false;
this.selectedItems.splice(idx, 1);
}
...
}
interface Item {
name: string;
selected: boolean;
}
html
<li>
<div class="c-seedContainer u-displayOnly">
<span *ngFor="let item of selectedItems; let i = index" (click)="unSelect(item, i)">
{{ item.name }}
</span>
</div>
</li>
<li>
<div class="c-seedContainer u-selectionSeed">
<span [class.u-removeSeed]="item.selected" (click)="select(item)"
*ngFor="let item of items">
{{ item.name }}
</span>
</div>
</li>
注意:我还从您的 css 中的 .c-seedContainer.u-displayOnly
选择器中删除了 pointer-events: none;
规则
关于javascript - 数组 onclick 之间的 Angular 移动数组项 - 包括 Plunker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48753928/
有什么办法可以将多个文件上传到http://plnkr.co ,而不是一直复制粘贴代码?如果 plunker 可以连接到 github 存储库,或者可以拖入一组文件,那就太好了。 最佳答案 没有内置方
今天,我发现了一个有趣的plunker,经过谷歌大量搜索后一无所获,希望我能在这里找到答案。我只是想要那个笨蛋的副本。我不想使用复制和粘贴技术。有什么方法可以获取已建立的 plunk 的副本吗?我如何
有没有办法删除过时的Plunker版本,但保留最新版本? 我在我的 plunk 的原始版本中粘贴了几行,我想隐藏它们。 最佳答案 如果不删除整个 Plunk,则无法删除 Plunk 的版本。 关于pl
如何在 plunker 中创建目录?或者如果有一个目录,如何在该目录中创建新文件/移动? 您需要为此使用外部工具吗? 例如: 我已经编辑了现有的 angular2 plunker ,我已经创建了 my
我是这个星球上唯一不能通过标签搜索 plunker 的人吗?这太令人沮丧了,多年来我一直都是这样。此外,我找不到其他人提示同样的问题。我单击顶部的 Tags 选项卡,它会将我带到一个标签页面,它显示“
请参阅 plunker。 http://plnkr.co/edit/EzMmIUYSa11Pl6vbwV7o?p=preview 如您所见,有两个输入字段,每个输入字段前面都有一个说明。 目前,它允许
我试图完全理解 Angular2 final 的变化检测。 这包括: 处理变更检测策略 从组件上连接和分离更改检测器。 我以为我已经对这些概念有了一个非常清晰的概述,但是为了确保我的假设正确,我写了一
http://plnkr.co/edit/v53QDV8604OwGc6VdVYw?p=preview 我有一个非常基本的疑问,我不知道如何解决它。如果您看到输入字段为“负”,我必须从用户那里获取负值
我有一个无法修复的小错误。这是笨蛋-> http://plnkr.co/edit/D3EjXKf48Sq2vuc5MHNx?p=preview 当用户打开模式并进行选择时,他选择按“确定”关闭模式 此
我有两个带有嵌套对象的数组,作为 API 端点调用的一部分下载,其中一个(预览版)只有数字。 示例: [{ obj1:[1, 2], obj2:[3, 4] }] 我必须对另一个端点进行第二次
我已经使用 plunker 大约一个月了。我正在制作一个 backbonejs plunker,我看到 Underscore 丢失了我的模板设置并退回到 ERB 样式模板,而我想要 Mustache
我正在尝试检查我的 ionic 项目,该项目是通过 angular js 构建的,但无法在 plunker 上运行它。它在我的本地机器上运行,包含所有 rpm 包等
http://plnkr.co/edit/a5RpkuWJFMfnOgoKr7pm?p=preview 请引用插件链接。按照这个,我希望我的复选框位于最左侧,并且值“数据:”始终位于最右侧。我的意思是
我一直在关注 this guide from Zurb ,但我无法让这个简单的下拉菜单正常工作。 这是一个傻瓜:http://plnkr.co/edit/nMqBGEjOvhVtaWFIIQHD 我做
我正在使用 Plunker ( http://plnkr.co/ ) 来测试 JavaScript。我想从浏览器控制台访问我在脚本中定义的变量。 在 Plunker 中,谁能告诉我如何从浏览器控制台访
我正在学习 AngularJS 并尝试测试路由。我想知道 Plunker 是否支持这个以便我可以浏览不同的页面。 *单击“登录”返回预览不存在或已过期。在 View 中 Plunker Demo HT
几周前我做了一个 plunker,一切都很顺利。 但是今天当我重新访问它时,我的脚本被 404 轰炸了,知道发生了什么变化吗? http://plnkr.co/edit/M2hRaf?p=previe
super 简单的问题很抱歉,但是否可以在 plunker 中使用 sass https://plnkr.co/ 最佳答案 是的,您可以使用 SCSS 语法。只需创建一个文件 .scss来自 HTML
我在将 JSON 数据文档显示/输入到 Plunker 上的 HTML 文档中时遇到问题。 当前使用的JS: $(document).ready(function() { //Content Vi
我一直在尝试获得有关日历逻辑的帮助,因此一次只能从表格中选择一个单元格,但这里的 Plunker: http://plnkr.co/edit/F0MIoZIQ3pkhuDgcH2wo?p=info似乎
我是一名优秀的程序员,十分优秀!