【Ginza.js#8 - LT 슬라이드】Vue.js로 웹 화면에 Bash의 history 기능을 구현한다
Bash의 history 기능, 편리하죠?
웹 양식에도 구현할 수 있다면 편리해야합니다.
그래서 구현할 것입니다.
우선 Bash의 history의 거동을 확인
거동 1
↑키로 1개전, ↓키로 1개 후에 실행한 커멘드를 표시할 수 있다
행동 2
실행 전 편집중인 명령도 history에 반영됩니다.
거동 3
명령을 실행할 때마다 편집중인 명령이 재설정됩니다.
구현 흐름
그래서 구현할 것입니다.
우선 Bash의 history의 거동을 확인
거동 1
↑키로 1개전, ↓키로 1개 후에 실행한 커멘드를 표시할 수 있다
행동 2
실행 전 편집중인 명령도 history에 반영됩니다.
거동 3
명령을 실행할 때마다 편집중인 명령이 재설정됩니다.
구현 흐름
↑키, ↓키와 Enter키의 거동을 구현
ID가있는 입력 태그 준비
history.html<input id="form" placeholder="some text">
무엇이든, 우선 v-model
history.html<input
id="form"
placeholder="some text"
v-model="text"
>
키보드 이벤트 바인딩
history.html<input
~ 省略 ~
v-on:keydown.arrow-up.prevent="backHist"
v-on:keydown.arrow-down.prevent="headHist"
v-on:keydown.enter='confirm'
>
※ prevent
로 디폴트의 거동을 무효화하지 않으면 커서의 위치가 날아간다
Vue 인스턴스 생성
history.jsconst form=new Vue({
el: "#form",
data: {
text: '', // フォームの初期値
index: 0, // ヒストリのインデックス
history: [ '' ] // ヒストリの先頭にもフォームの初期値を入れておく
}
})
※배열의 선두가 최신의 값으로 한다
↑키↓키 이벤트 발화시의 함수를 정의
history.jsconst form=new Vue({
~ 省略 ~
methods: {
backHist(){
// indexはhistoryの長さ未満
(this.index + 1) < this.history.length
? this.index++
: undefined
this.text=this.history[this.index];
},
headHist(){
// indexは0より小さくはならない
(this.index - 1) < 0
? undefined
: this.index--
this.text=this.history[this.index];
},
}
});
Enter 키 이벤트 발화시 함수 정의
history.jsconst form=new Vue({
~ 省略 ~
methods: {
~ 省略 ~
confirm: function(){
this.hist[0]=this.text; // 現在の値をヒストリの最新値として格納
// 次のヒストリの初期値を入力(現在のテキストが空のときはヒストリを追加しない)
this.text === ''
? undefined
: this.hist=[ '', ...this.hist ]
this.index=0; // インデックスを0(最新の値)に戻す
this.text=''; // フォームをクリア
}
}
});
이제 ↑ 키, ↓ 키와 Enter 키의 거동을 재현 할 수있었습니다.
편집시의 거동 구현
키 입력 이벤트 바인딩
history.html<input
~ 省略 ~
v-on:input="editHist"
>
키를 입력할 때마다 히스토리가 '편집됨'이라고 생각
히스토리에 원본 텍스트와 편집 중인 텍스트를 저장할 수 있도록 허용
history.jsconst form=new Vue({
~ 省略 ~
data: {
~ 省略 ~
history: [{
text: '', // オリジナル
edit: undefined, // 編集中のテキスト(なければundefined)
}]
}
})
편집 이벤트 발화를 위한 함수 정의
history.jsconst form=new Vue({
~ 省略 ~
methods: {
~ 省略 ~
editHist: function(){
this.hist[this.index].edit=this.text;
}
}
})
history의 값 변경에 따라 confirm 함수 변경
history.jsconst form=new Vue({
~ 省略 ~
methods: {
~ 省略 ~
confirm: function(){
this.hist[0].text=this.text; // 現在の値をヒストリの最新値として格納
// 編集中の値をクリア
this.hist.forEach(
h => h.edit=undefined
);
// 次のヒストリの初期値を入力(現在のテキストが空のときはヒストリを追加しない)
this.text === ''
? undefined
: this.hist=[{
text: '',
edit: undefined
}, ...this.hist ]
// .slice(0, 16) でhistoryの登録数上限(16)を指定することも可能
this.index=0; // インデックスを0(最新の値)に戻す
this.text=''; // フォームをクリア
}
}
})
이상으로 편집의 거동도 구현할 수 있었습니다
왜 이것을 구현했는가?
그러나
결론
쉽게 구현할 수 있으므로 IT 엔지니어를 타겟으로 한 서비스로 구현해 보는 것은 어떨까요?
About Me
평소에는 인프라 엔지니어
JavaScript와 ShellScript로 인프라 자동화가 가능한 OSS를 개발하고 있습니다.
<input id="form" placeholder="some text">
<input
id="form"
placeholder="some text"
v-model="text"
>
<input
~ 省略 ~
v-on:keydown.arrow-up.prevent="backHist"
v-on:keydown.arrow-down.prevent="headHist"
v-on:keydown.enter='confirm'
>
const form=new Vue({
el: "#form",
data: {
text: '', // フォームの初期値
index: 0, // ヒストリのインデックス
history: [ '' ] // ヒストリの先頭にもフォームの初期値を入れておく
}
})
const form=new Vue({
~ 省略 ~
methods: {
backHist(){
// indexはhistoryの長さ未満
(this.index + 1) < this.history.length
? this.index++
: undefined
this.text=this.history[this.index];
},
headHist(){
// indexは0より小さくはならない
(this.index - 1) < 0
? undefined
: this.index--
this.text=this.history[this.index];
},
}
});
const form=new Vue({
~ 省略 ~
methods: {
~ 省略 ~
confirm: function(){
this.hist[0]=this.text; // 現在の値をヒストリの最新値として格納
// 次のヒストリの初期値を入力(現在のテキストが空のときはヒストリを追加しない)
this.text === ''
? undefined
: this.hist=[ '', ...this.hist ]
this.index=0; // インデックスを0(最新の値)に戻す
this.text=''; // フォームをクリア
}
}
});
키 입력 이벤트 바인딩
history.html
<input
~ 省略 ~
v-on:input="editHist"
>
키를 입력할 때마다 히스토리가 '편집됨'이라고 생각
히스토리에 원본 텍스트와 편집 중인 텍스트를 저장할 수 있도록 허용
history.js
const form=new Vue({
~ 省略 ~
data: {
~ 省略 ~
history: [{
text: '', // オリジナル
edit: undefined, // 編集中のテキスト(なければundefined)
}]
}
})
편집 이벤트 발화를 위한 함수 정의
history.js
const form=new Vue({
~ 省略 ~
methods: {
~ 省略 ~
editHist: function(){
this.hist[this.index].edit=this.text;
}
}
})
history의 값 변경에 따라 confirm 함수 변경
history.js
const form=new Vue({
~ 省略 ~
methods: {
~ 省略 ~
confirm: function(){
this.hist[0].text=this.text; // 現在の値をヒストリの最新値として格納
// 編集中の値をクリア
this.hist.forEach(
h => h.edit=undefined
);
// 次のヒストリの初期値を入力(現在のテキストが空のときはヒストリを追加しない)
this.text === ''
? undefined
: this.hist=[{
text: '',
edit: undefined
}, ...this.hist ]
// .slice(0, 16) でhistoryの登録数上限(16)を指定することも可能
this.index=0; // インデックスを0(最新の値)に戻す
this.text=''; // フォームをクリア
}
}
})
이상으로 편집의 거동도 구현할 수 있었습니다
왜 이것을 구현했는가?
그러나
결론
쉽게 구현할 수 있으므로 IT 엔지니어를 타겟으로 한 서비스로 구현해 보는 것은 어떨까요?
About Me
평소에는 인프라 엔지니어
JavaScript와 ShellScript로 인프라 자동화가 가능한 OSS를 개발하고 있습니다.
쉽게 구현할 수 있으므로 IT 엔지니어를 타겟으로 한 서비스로 구현해 보는 것은 어떨까요?
About Me
평소에는 인프라 엔지니어
JavaScript와 ShellScript로 인프라 자동화가 가능한 OSS를 개발하고 있습니다.
Reference
이 문제에 관하여(【Ginza.js#8 - LT 슬라이드】Vue.js로 웹 화면에 Bash의 history 기능을 구현한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mjusui/items/e0b098a8253e68ef2be0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)