๋๊ธฐ ๋ฐฉ์๊ณผ ๋น๋๊ธฐ ๋ฐฉ์
๋๊ธฐ ๋ฐฉ์
์์ฐจ์ ์ผ๋ก ์งํ์ด ๋์ด์ผ ํ๋ ๊ฒ์ผ๋ก
์๋ฒ์ ์์ฒญ์ ๋ณด๋ผ์ ์๋ต์ด ๋์์์ผ ๋ค์ ์์ ์ด ์ํ ๊ฐ๋ฅํจ
๋น๋๊ธฐ ๋ฐฉ์
์์ฒญ์ ๋ณด๋ผ๋ ์๋ต ์ํ์ ๋ฌด๊ดํ๊ฒ ๋ค์ ๋์์ ์ํํ ์ ์์ผ๋ฉฐ
๊ฒฐ๊ณผ๊ฐ์ด ๋์ค๋ ๊ฒ๊ณผ ๋ณ๊ฐ๋ก ์๋์ ์ฝ๋๋ค์ด ์คํ๋๋ค
์๋ฅผ๋ค์ด, setTimeout() ๋ฉ์๋๋ฅผ ์๊ฐํด๋ณด๋ฉด,
๋น๋๊ธฐ APi ์ด๋ฉฐ, ์ฒซ๋ฒ์งธ ์ธ์๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉฐ,
๋๋ฒ์งธ ์ธ์๋ ์ง์ฐ์๊ฐ์ด๋ค
๋๋ฒ์งธ ์ธ์๊ฐ 0 ์ด๊ธฐ์ 1 -> 2 -> 3 ์ผ๋ก ์ถ๋ ฅ๋ ๊ฑฐ๋ผ ์๊ฐํ ์๋ ์๋ค
console.log("1");
setTimeout( () => {
console.log("2");
}, 0);
console.log("3");
ํ์ง๋ง, ๋น๋๊ธฐ ๋ฉ์๋๋ ์ด๋ฅผ ์ฒ๋ฆฌํ๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ด ๋ด๋นํ๊ธฐ์,
1 -> 3 -> 2๋ก ์คํ๋๊ฒ ๋๋ค
์ฆ, setTimeout() ๋ฉ์๋๋ฅผ ์ฒ๋ฆฌํ๋ ํ๋ก๊ทธ๋จ์ ๋น๋๊ธฐ์ API ๋ฅผ ์ ์ธํ ๋ชจ๋ ์ฝ๋๊ฐ ์คํ๋ ์ดํ ๊ฒฐ๊ณผ๋ฅผ ์ฝ์์ ์ถ๋ ฅํ๋ค
๋ค์๋งํด, ๋น๋๊ธฐ ์ฝ๋์ ์คํ ๊ฒฐ๊ณผ๋ ๋๊ธฐ์ ์ฝ๋๊ฐ ์ ๋ถ ์คํ๋๊ณ ๋์ ๊ฐ์ ๋ฐํํ๊ฒ ๋๋ค
ํจ์จ์ฑ๋ฉด์์๋, ๋๊ธฐ์ ์ฝ๋๊ฐ ๋น๋๊ธฐ๋ณด๋ค ์ง๊ด์ ์ด์ง๋ง,
๊ฒฐ๊ณผ๊ฐ ํ์ํ ์ฝ๋์์๋ ๋๊ธฐ ์๊ฐ์ด ํ์ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์๋ ์๋ค.
๊ทธ๋ ๊ธฐ์ ๋น๋๊ธฐ๋ ๋๊ธฐ๋ณด๋ค๋ ๋ณต์กํ์ง๋ง, ๊ฒฐ๊ณผ๊ฐ ์ฃผ์ด์ง๋๋ฐ๋ก ๋ค๋ฅธ ์๊ฐ๋์ ๋ค๋ฅธ ์์ ์ ์ํํ๋ฉด์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์ฝ๋๋ฅผ ์คํ์์ผ ๋๊ฐ๋ฏ๋ก ํจ์จ์ ์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์์ ๋๊ธฐ, ๋น๋๊ธฐ ๊ฐ๋ ์ ์ฌ์ฉ์ ์์ฃผ ํ๊ฒ ๋๋ค.
Vuetify์์ v-text-field์ ์ ํจ์ฑ ๊ท์น ๋ฃ๊ธฐ
- ์ด๋ฉ์ผ์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํ๋ ค๊ณ ํ๋๋ฐ
- :rules์ ๊ฐ์ ธ์ฌ ๊ท์น์ด๋ฆ์ ๋ฃ์ ์ ์๋ค -> validate๋ฅผ ์ ์ฉ ๊ฐ๋ฅ
- form input์์ validation์ ์ ๊ณต
- ์ค์๊ฐ ๊ฒ์ฆ์ ํ๊ธฐ์ํด์๋ ๋น๋๊ธฐ์ ์ผ๋ก ๊ตฌํํด์ผํจ
- email v-text field ๊ท์น์ data์ ๋ฐฐ์ด ํ์์ผ๋ก ๋ง๋ค๊ธฐ
- v : ํ๋์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ
- !!v : ํ๋์ ๋ฐ์ดํฐ๊ฐ ์์ ๋
- replace(/(\s*)/g, '') : ํ๋์ ๋ค์ด๊ฐ ๋ชจ๋ ๋น์นธ์ ์ ๊ฑฐ ( password ๊ฐ์ ๊ฒฝ์ฐ ์ด๋ ๊ฒ ์ฌ์ฉ)
- ํ๋์ ๋น์นธ์ด ๋ค์ด๊ฐ๊ฒ๋๋ฉด ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ ๋๋ก ๋ชป ํ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์ ์๋ค!!
- pattern : ์ด๋ฉ์ผ ์ ๊ท์์ผ๋ก ๋ง๋ค์ด ์ ์ฉ
์ค์ ํ ํ ์ ํจ์ฑ ์ฒดํฌ๋ฅผ ๋ชจ๋ ๊ฑฐ์น๊ณ submit ํด์ผํจ
<์ฝ๋ 1>
methods:{
async login(){
const validate = this.$refs.form.validate()
if (validate){
const email = this.email.replace(/(\s*)/g, '')
const password = this.password.replace(/(\s*)/g, '')
await this.$store.dispatch('LOGIN', { email, password, saveLogin:this.autoLoginCheckBox })
}
}
}
์์ ๊ฐ์ด
์ ์ฒด ํ ํ๋ฆฟ์ v-form ํ๊ทธ์ reff= "form" ์ ๋ฃ์ด์ฃผ๊ฑฐ๋,
<v-form
ref="form"
@submit.prevent="login"
>
<v-col cols="12" md="12">
<v-card-actions>
<v-spacer></v-spacer>
<v-btn
color="grey darken-3"
@click="dataChunk"
outlined
depressed
large
:loading="this.$store.state.RPAStore.SearchLoading"
type="submit"
:disabled="invalid"
><v-icon right dark> mdi-file-search </v-icon>
๊ฒ์ ํ๊ธฐ
</v-btn>
</v-card-actions>
</v-col>
</v-row>
</template>
์ด๋ฐ์์ผ๋ก ํ ํ๋ฆฟ ํ๋จ์ ๊ฒ์ํ๊ธฐ ๋ฒํผ์ ๋ง๋ค์ด์ฃผ๊ณ , type์ submit์ผ๋ก ๋ง๋ค์ด์,
ํ์ํ ๋ฐ์ดํฐ๋ค์,
methods: {
...mapActions(["EseroParser"]),
searchData() {
console.log("dataChunk ๊ฒ์");
let parameter = {
email: this.email,
date_from: this.date,
date_to: this.date2,
};
this.dataParser(parameter);
},
},
};
</script>
์ด๋ ๊ฒ, email ๊ณผ ์ ๋ ฅ ๋ฐ์ ๋ฐ์ดํฐ๋ค์ dataParser ๋ก ๋ณด๋ด์ฃผ๊ฒ ์ค์ ํฉ๋๋ค.
์ฐธ๊ณ ๋ก, dataParser ๋ store ์์ ์ค์ ํ actions๋ก ์ถํ ์ค๋ช ์ ๋จ๊ธฐ๋๋ก ํ๊ฒ ์ต๋๋ค.
์๋ฌดํผ, <์ฝ๋ 1>์ ์ํด์, validate ์ ๋ง๋ค๊ณ ,
this.$refs.form.validate()๊ฐ true์ธ์ง false์ธ์ง ํ์ธ ํ true์ผ๋ submit์ ํ๋๋ก if๋ฌธ์ ๊ฑธ์ด์ฃผ์ด ์คํํ๋ฉด ๋ฉ๋๋ค
๊ณต๋ถํด์ผํ ๊ฒ
- await ์ async ๋ฐฉ์์ ํตํด์ ์ด๋ฉ์ผ ๊ฒ์ฆํ๋ ๋ฐฉ์
- ๋น๋๊ธฐ์ ํต์ ์ ์ข ๋ ํจ๊ณผ์ ์ผ๋ก ํ ์ ์๋ ๋ฐฉ์
- promise ํํ์ ํต์ ๋ฐฉ์
- vuetify์ ๊ธฐ๋ฅ์ ์ต์ ํ์ ๋ง์ถฐ์ ์ฌ์ฉํ๋ ๋ฐฉ์๋ฑ
- vuelidate ํน์ vee-validate ์ด๋ผ๋ ํด ์ฌ์ฉ ๋ฐฉ๋ฒ ๋ฑ(npm ์ฌ์ฉ - ๋ฐ๋ก ์ค์นํด์ผํจ)
์์ง ๊ฐ๋ฐ์๋ก์ ๋ฐฐ์ธ ๊ฒ๋ค์ด ์์์ด ๋ง์์ ๋๋ผ๋ ํ๋ฃจ..
์ปคํผ ๋ง์๋ฉด์ ๊ณ์ ์ ๋ฆฌํด๋๊ฐ์ผ์ง..
'๐๏ธ์ํํธ์จ์ด > ๐JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฐ์คํฌ๋ฆฝํธ์์ ํ์ดํ๋ฅผ ์ฌ์ฉํ๋ ์ด์ (0) | 2022.11.29 |
---|---|
[์๋ฐ์คํฌ๋ฆฝํธ] Math ํจ์ ์ด์ฉํ์ฌ ๋ก๋ ๋ฒํธ ์์ฑํ๊ธฐ (0) | 2022.11.08 |
node ์ด์ฉํ json ์ฝ๋ฐฑ ํจ์ (0) | 2022.09.29 |
json ๋ฐ์ดํฐ vscode๋ก ๊น๋ํ๊ฒ ๋ณด๋ ๋ฐฉ๋ฒ(feat.์ ๋ ฌ) (0) | 2022.09.29 |
[AWS + Filezila] ์น์๋น์ค ๋ฐฐํฌ ์ํ ์์ (2) | 2022.09.23 |