質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Angular

Angularは、JavaScriptフレームワークです。AngularJSの後継であり、TypeScriptベースで実装されています。機能ごとに実装を分けやすく、コードの見通しが良いコンポーネント指向です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

1699閲覧

Angular 項目を並べ替えるボタンを追加する (↑↓ボタンをクリックで、項目が前後に移動する)

A4UxdAF799hT6WT

総合スコア5

Angular

Angularは、JavaScriptフレームワークです。AngularJSの後継であり、TypeScriptベースで実装されています。機能ごとに実装を分けやすく、コードの見通しが良いコンポーネント指向です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2021/08/18 10:26

編集2021/08/22 11:25

実現したいこと

    1. 項目を並べ替えるボタンを追加する (↑↓ボタンをクリックで、項目が前後に移動する)

仮説

  • 配列の値を取得→条件式→移動

コード

html

1 2 3<h1>Todo App</h1> 4<form [formGroup]="rForm"> 5 <div class="form-group registItemArea"> 6 <div class="input-group"> 7 <input id="title" class="form-control" placeholder="Title" formControlName="title" /> 8 <span class="input-group-btn"> 9 <button class="btn btn-default" type="button" (click)="hasDetail = !hasDetail">詳細</button> 10 </span> 11 </div> 12 </div> 13 <div class="card card-block card-header" (click)="hasDetail = !hasDetail"> 14 <div class="form-group"> 15 <label for="description"> 16 <strong>詳細:</strong> 17 </label> 18 <textarea id="text" class="form-control" formControlName="description"></textarea> 19 </div> 20 21 <div class="form-group"> 22 <label for="date"> 23 <strong>日付:</strong> 24 </label> 25 <input type="date" class="form-control" formControlName="date" /> 26 </div> 27 </div> 28</form> 29<div class=" row "> 30 <div class="col-sm-2 "> 31 <button class="createBtn btn btn-success " [disabled]="this.rForm.invalid" (click)="onSaveTodoItem()">作成</button> 32 </div> 33</div> 34<hr> 35<div class="row itemListArea "> 36 <div class="col-sm-12"> 37 <li *ngFor="let item of itemList; let i=index;"> 38 <div accordion-heading [class.isComplete]="item.isComplete"> 39 <button class="btn btn-danger" (click)="onUpItem(i)"></button> 40 <button class="btn btn-danger" (click)="onDownItem(i)"></button> 41 {{item.title}} 42 </div> 43 <div> 44 <strong>詳細:</strong> 45 <pre>{{item.description ? item.description : "-"}}</pre> 46 </div> 47 <div> 48 <strong>日付:</strong> 49 <span>{{item.date ? item.date : "-"}}</span> 50 </div> 51 <div> 52 <button class="btn btn-danger" (click)="onDeleteItem(i)">削除</button> 53 <button class="btn btn-success" (click)="item.isComplete = !item.isComplete ">{{item.isComplete ? "未完了に戻す" : "完了にする"}}</button> 54 55 </div> 56 </li> 57 </div> 58</div>

ts

1import { Component, OnInit } from '@angular/core'; 2import { FormGroup, FormControl } from '@angular/forms'; 3import { FormBuilder } from '@angular/forms'; 4import { Validators } from '@angular/forms'; 5import { FormArray } from '@angular/forms'; 6 7interface TodoItem { 8 title: string; 9 description: string; 10 isComplete: boolean; 11 date: any; 12} 13 14@Component({ 15 selector: 'app-form-practice', 16 templateUrl: './form-practice.component.html', 17 styleUrls: ['./form-practice.component.scss'] 18}) 19export class FormPracticeComponent implements OnInit { 20 21 // 詳細が表示されているか 22 public hasDetail = false; 23 // アイテムリスト 24 public itemList: Array<TodoItem> = new Array<TodoItem>(); 25 26 rForm: FormGroup; 27 constructor(protected fb: FormBuilder) { 28 } 29 ngOnInit() { 30 this.createForm(); 31} 32 createForm(): void { 33 // Form の作成と初期値設定をします。 34 this.rForm = this.fb.group({ 35 title: ['', 36 [ 37 Validators.required 38 ] 39 ], 40 description: [''], 41 date: [''], 42 isComplete: [false] 43 }); 44 } 45 46 // todoItem を 保存します 47 onSaveTodoItem(): void { 48 const item: TodoItem = { 49 title: this.rForm.get('title').value, 50 isComplete: false, 51 description: null, 52 date: null 53 }; 54 55 if (this.hasDetail) { 56 item.description = this.rForm.get('description').value; 57 item.date = this.rForm.get('date').value; 58 } 59 60 this.itemList.push(item); 61 this.clearForm(); 62 console.log(this.itemList); 63 } 64 65 // フォームの値をリセット 66 clearForm(): void { 67 this.rForm.reset(); 68 } 69 70 // 指定した要素を削除 71 onDeleteItem(index: number): void { 72 this.itemList.splice(index, 1); 73 } 74 75// 指定した要素を上に移動 76 onUpItem(index: number): void { 77 this.itemList.splice(0, index); 78 } 79// 指定した要素を下に移動 80 onDownItem(index: number): void { 81 this.itemList.splice(-1, index); 82 } 83}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gekijin

2021/08/18 16:03

DragDropModule は画面上の部品をドラッグ&ドロップするためのモジュールなので「項目を並べ替えるボタンを追加する (↑↓ボタンをクリックで、項目が前後に移動する)」という実現したいこととは合わないのではないかと思います。
A4UxdAF799hT6WT

2021/08/19 14:05

ありがとうございます。おっしやる通りですね。改善します。
guest

回答1

0

ベストアンサー

Array.prototype.splice メソッドの第3引数以下を使ってできました。

JavaScript

1 // 指定した要素を上に移動 2 onUpItem(index: number): void { 3 if (index == 0) return; 4 this.itemList.splice(index - 1, 2, this.itemList[index], this.itemList[index - 1]); 5 } 6 7 // 指定した要素を下に移動 8 onDownItem(index: number): void { 9 if (index == this.itemList.length - 1) return; 10 this.itemList.splice(index, 2, this.itemList[index + 1], this.itemList[index]); 11 }

入れ替えたい部分の要素を2つ削除して、入れ替えた後の順で入れています。

投稿2021/08/22 13:07

gekijin

総合スコア187

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

A4UxdAF799hT6WT

2021/08/22 16:32

詰まって困っていたところが解決できました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問