6.1、双方向データバインディングとは
Vue.jsはMVVMフレームワークです。つまり、データの双方向バインディングです。つまり、データが変更されるとビューが変更され、ビューが変更されるとデータが同期的に変更されます。これがVue.jsの本質です。
双方向のデータバインディングについて説明する場合、UIコントロールの非UIコントロールには双方向のデータバインディングが含まれていないことに注意してください。一方向のデータバインディングは、状態管理ツールを使用するための前提条件です。vue xを使用する場合、データフローも単一アイテムであり、双方向のデータバインディングと競合します。
(1)データの双方向バインディングを実装する理由
でVue.js
使用vuex
する場合、データは実際には一方向です。データ双方向バインディングと呼ばれる理由は、UIコントロールに使用されるためです。フォームを処理するためにVue.js
、双方向データバインディングは特に快適です。使用します。つまり、この2つは相互に排他的ではなく、1つのアイテムがグローバルデータフローで使用されるため、追跡に便利です。ローカルデータフローは双方向であり、操作が簡単です。
6.2.フォームでの双方向データバインディングの使用
ディレクティブを使用v-model
して、フォームと要素に双方向のデータバインディングを作成できます。コントロールタイプに基づいて要素を更新するための正しいメソッドを自動的に選択します。やや魔法のようv-model
ですが、本質的には糖衣です。ユーザー入力イベントをリッスンしてデータを更新し、極端なシナリオでは特別な処理を行います。
注:v-model
すべてのフォーム要素の、、、および属性の初期値は無視されvalue
、checked
インスタンスselected
データVue
は常にデータソースとして使用されます。これを行うJavaScript
には、コンポーネントのオプションでdata
初期値を宣言します。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
输入的文本:<input type="text" v-model="message" value="hello">{
{message}}
</div>
<script src="../js/vue.js"></script>
<script type="text/javascript">
var vm = new Vue({
el:"#app",
data:{
message:""
}
});
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
多行文本:<textarea v-model="pan"></textarea> 多行文本是:{
{pan}}
</div>
<script src="../js/vue.js"></script>
<script type="text/javascript">
var vm = new Vue({
el:"#app",
data:{
message:"Hello hello!"
}
});
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
单复选框:
<input type="checkbox" id="checkbox" v-model="checked">
<label for="checkbox">{
{checked}}</label>
</div>
<script src="../js/vue.js"></script>
<script type="text/javascript">
var vm = new Vue({
el:"#app",
data:{
checked:false
}
});
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
多复选框:
<input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
<label for="jack">Jack</label>
<input type="checkbox" id="join" value="Join" v-model="checkedNames">
<label for="join">Jack</label>
<input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
<label for="mike">Mike</label>
<span>选中的值:{
{checkedNames}}</span>
</div>
<script src="../js/vue.js"></script>
<script type="text/javascript">
var vm = new Vue({
el:"#app",
data:{
checkedNames:[]
}
});
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
单选框按钮
<input type="radio" id="one" value="One" v-model="picked">
<label for="one">One</label>
<input type="radio" id="two" value="Two" v-model="picked">
<label for="two">Two</label>
<span>选中的值:{
{picked}}</span>
</div>
<script src="../js/vue.js"></script>
<script type="text/javascript">
var vm = new Vue({
el:"#app",
data:{
picked:'Two'
}
});
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<!-- 性别:
<input type="radio" name="sex" value="男" v-model="pan">男
<input type="radio" name="sex" value="女" v-model="pan">女
<p>选中了:{
{pan}}</p>-->
下拉框:
<select v-model="pan">
<option value="" disabled>---请选择---</option>
<option>A</option>
<option>B</option>
<option>C</option>
<option>D</option>
</select>
<span>value:{
{pan}}</span>
</div>
<script src="../js/vue.js"></script>
<script type="text/javascript">
var vm = new Vue({
el:"#app",
data:{
pan:"A"
}
});
</script>
</body>
</html>
注:v-model
式の初期値がどのオプションとも一致しない場合、メタシステムは「未選択」としてレンダリングされます。iOSでは、これによりユーザーは最初のオプションを選択できなくなります。その場合、iOSはchange
イベントを発生させないためです。したがって、上記のように空の値で無効化オプションを提供することをお勧めします。
6.3.コンポーネントとは
コンポーネントは再利用可能なVue
インスタンスです。端的に言えば、再利用可能なテンプレートのセットです。JSTL
カスタムタグや他のフレームワークThymeleal
のフレームワークに似ていth:fragment
ます。通常、アプリケーションはネストされたコンポーネントツリーの形式で編成されます。
たとえば、ヘッダー、サイドバー、コンテンツ領域などのコンポーネントがあり、各コンポーネントにはナビゲーションリンク、ブログ投稿などの他のコンポーネントが含まれている場合があります。
注:実際の開発では、次の方法ではなく、ファイルvue-cli
を作成してvue
テンプレート化することでコンポーネントを開発します。次の方法は、コンポーネントが何であるかをすべての人に理解させるためのものです。
このメソッドを使用しVue.component()
てコンポーネントを登録します。形式は次のとおりです。
<div id="app">
<pan></pan>
</div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js"></script>
<script type="text/javascript">
//先注册组件
Vue.component("pan",{
template:'<li>Hello</li>'
});
//再实例化Vue
var vm = new Vue({
el:"#app",
});
</script>
説明:
Vue.component()
:コンポーネントを登録するpan
:カスタムコンポーネントの名前template
:コンポーネントのテンプレート
上記のようなコンポーネントを使用することは意味がないため、コンポーネントにパラメータを渡してから、props
プロパティを使用する必要があります。
注:propsプロパティの値は、デフォルトのルールでは大文字にすることはできません。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id="app">
<!--组件:传递给组件中的值:props-->
<pan v-for="item in items" v-bind:panh="item"></pan>
</div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js"></script>
<script type="text/javascript">
//定义组件
Vue.component("pan",{
props:['panh'],
template:'<li>{
{panh}}</li>'
});
var vm = new Vue({
el:"#app",
data:{
items:["java","Linux","前端"]
}
});
</script>
</body>
</html>
説明:
v-for="item in items"
Vue
:インスタンスで定義された名前付きitems
配列を反復処理し、同数のコンポーネントを作成しますv-bind:panh="item"
:item
トラバースされたアイテムをコンポーネントで定義されたプロパティにバインドしますprops
;item
=記号の左側panh
はprops
定義されたプロパティ名であり、右側はitem in items
トラバースされたアイテムアイテムの値です