うまく機能する既存のHTMLサインアップフォーム(Laravelを使用して作成)があります。次のようなパスワード要件のチェックボックスを使用して徐々に拡張できるVueコンポーネントを作成しようとしています。
私の質問は、現在のパスワード値をコンポーネントの小道具に渡すにはどうすればよいですか?私が探しているのは一方向バインディングと呼ばれていると思いますが、よくわかりません。読む。
これが私のフォームの非常に単純化されたバージョンです:
<div id="app">
<form>
<input id="email" type="email" required>
<input id="passwordInput" type="password" required>
<password-requirements password="<How do I bind this to #passwordInput above?>" />
<button type="submit">Submit</button>
</form>
</div>
Vueアプリケーションインスタンスがページにアタッチされる方法と、コンポーネントが登録される方法は次のとおりです。
app.js
Vue.component('password-requirements', require('./components/PasswordRequirements.vue').default);
const app = new Vue({
el: '#app'
});
...そしてこれがカスタムコンポーネントのコードの簡略版です:
PasswordRequirements.vue
<template>
<!-- template html goes here -->
</template>
<script>
export default {
data: function () {
return {
hasLength: false,
hasLowercase: false,
hasUppercase: false,
hasNumberOrSymbol: false
}
},
props: {
password: {
type: String
}
},
methods: {
checkPassword: function() {
/* code to check password requirements goes here */
}
},
mounted() {
this.checkPassword();
}
}
</script>
繰り返しますが、私の質問は、現在のパスワード値を<password-requirements>
コンポーネントの小道具に渡す方法です。これを再利用可能なコンポーネントに変えて、フォームに大きな変更を加えることなく、他の既存のフォームにすばやくドロップして、徐々に拡張できるようにしたいと思います。
ありがとう!
data
ルートVueインスタンスにパスワードのプロパティを追加し、それを自分<input>
とコンポーネントにバインドします
const app = new Vue({
el: '#app',
data: () => ({ password: '' })
});
<!-- bind the input value to your data property with v-model -->
<input id="passwordInput" type="password" v-model="password" required>
<!-- bind the password property to your component's prop -->
<password-requirements :password="password" />
コンポーネントでは、変更を監視してcheckPassword
メソッドを実行できます
watch: {
password (val) {
this.checkPassword()
}
}
mounted
この時点でフックを取り外すこともできます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加