ホームページ > 記事 > ウェブフロントエンド > vue.jsのデータバインディングの操作方法
今回はvue.jsのデータバインディングの操作方法と、vue.jsのデータバインディングを操作する際の注意点を紹介します。以下は実践的なケースですので見ていきましょう。
データバインディング
レスポンシブデータバインディングシステム。バインディングが確立されると、DOM はデータと同期されるため、DOM を手動で保守する必要はありません。コードをより簡潔かつ理解しやすくし、効率を向上させます。
データ バインディング構文
1. テキスト補間
{{ }}Mustache タグ
rrreerrree単一補間
最初の割り当て後に VM インスタンスの属性値を変更しても問題は発生しませんDOM の変更
<span>Hello {{ name }}</span>
2. HTML 属性
Mustache タグ {{ }}
data:{ name: 'vue' } == > Hello vue
3. バインディング式
Mustache タグ内に配置されるテキスト コンテンツ。属性値を直接出力することに加えて、バインディング式は単純な JavaScript 式と、オプションで 1 つ以上のフィルターで構成できます (正規表現はサポートされていません。複雑な変換が必要な場合は、フィルターまたは計算されたプロパティを使用して処理します)。
<span v-once="name">{{ name }}</span>
4. フィルター
vue.js では、パイプ文字「|」で示されるオプションのフィルターを式の後に追加できます。
<p v-bind:id="'id-'+id"></p>このとき、filterA は、最初のパラメーターとして name の値を、2 番目と 3 番目のパラメーターとして arg1 と arg2 をフィルター関数に渡します。 最終関数の戻り値が出力結果となります。 arg1 と arg2 では、式を使用するか、一重引用符を追加して文字列を直接渡すことができます。 例:
<p :id="'id-'+id"></p>フィルターlimitByは2つのパラメーターを受け入れることができます。最初のパラメーターは表示番号を設定するもので、2番目のパラメーターはオプションであり、開始要素の配列添字を参照します。 vue.js 組み込み 10 フィルター (Vue.js2.0 で削除)
capitalize
: 文字列の最初の文字が大文字に変換されます。uppercase: 文字列を大文字に変換します。
小文字: 文字列を小文字に変換します。
currency: パラメータは{String}[通貨記号]、{Number}[小数点以下の桁数]で、数値を通貨記号に変換し、デジタルセクション番号が自動的に追加されます。
{{ index + 1}} {{ index == 0 ? 'a' : 'b' }} {{name.split('').join('|') }} {{ var a = 1 }} //无效pluralize: パラメータは {String}single、[double、triple] で、文字列は複数化されます。
{{ name | uppercase }} // Vue.js将name的值传入给uppercase这个内置的过滤器中(本质是一个函数),返回字符串的大写值。 {{ name | filterA | filterB }} //多个过滤器链式使用 {{ name | filterA arg1 arg2 }} //传入多个参数
{{ name.split('') | limitBy 3 1 }} // ->u,ejson: パラメータは{Number}[indent]スペースのインデント数で、jsonオブジェクトのデータをjson形式に準拠した文字列で出力します。
debounce
: 受信値は関数である必要があり、パラメーターはオプションです。これは遅延の長さである {Number}[wait] です。その結果、関数が呼び出されてから n ミリ秒が経過するまでアクションは実行されません。{{ amount | currency '¥' 2 }} //若amount值为1000,则输出为¥1,000.00limitBy: 受信値は配列である必要があります。パラメータは
{Number}limit
、{Number}[offset]
、limit は表示する数値です。 、オフセットは配列添字の表示を開始します。
<p v-for="c in count">{{ c | pluralize 'item' }} {{ c | pliralize 'st' 'nd' 'rd' 'th' }} </p>filterBy
{Number}limit
,{Number}[offset]
,limit为显示个数,offset为开始显示数组下标。//输出结果: 1item 1st 2items 2nd 3items 3rd 4items 4th
filterBy:传入值必须是数组,参数为{String | Function}targetStringOrFunction
,即需要匹配的字符串或函数;"in"可选分隔符。{String}[...searchKeys]
,为检索的属性区域。
<input v-on:keyup="onKeyup | debounce 500"> //input元素上监听了keyup事件,并且延迟500ms触发
<p v-for="item in items | limitBy 10"></p> //items为数组,且只显示数组中的前十个元素
使用自定义的过滤函数,函数可以在选项methods中定义
<p v-for="name in names | filterBy '1.0'">{{ name }}</p> //检索names数组中值包含1.0的元素 <p v-for="item in items | filterBy '1.0' in 'name'">{{ item | json }}</p> //检索items中元素属性name值为1.0的元素输出。检索区域也可以为数组,即in [name,version],在多个属性中进行检索。
orderBy:传入值必须是数组,参数为{String|Array|Function}sortKeys
: 受信値は配列である必要があり、パラメーターは {String Function}targetStringOrFunction
です。これは、「in」が一致する必要がある文字列または関数です。オプションのセパレータ。 {String}[...searchKeys]
は、取得された属性領域です。
//输出结果 vue1.0 {"name":"vue1.0","version":"1.0"}
<p v-for="item in items | filterBy customFilter" methods:{ cuestomFilter:function(item){ if(item.name) return true; //检索所有元素中包含name属性的元素 } }
オプション メソッドで定義できるカスタム フィルター関数を使用します
<p v-for="item in items | orderBy 'name' -1">{{ item.name}}</p> //items数组中以键名name进行降序排列orderBy
: 受信値は配列である必要があり、パラメーターは {String|Array|Function}sortKeys
、つまり並べ替え戦略を指定します。
単一のキー名: <p v-for="item in items | orderBy [name,version]">{{item.name}}</p> //使用items里的两个键名进行排序
複数のキー名:
<p v-for="item in items | orderBy customOrder">{{item.name}}</p> methods:{ customOrder: function(a,b){ return parseFloat(a.version) > parseFloat(b.version) //对比item中version的值的大小进行排序 } }
カスタムソート関数:
<img v-bind:src="avatar" /> <==> <img src="{{avatar}}" />5. 命令
命令の値は、バインディング式に制限されます。式が変更されると、バインドされた DOM にいくつかの特別な動作が適用されます。 パラメータ: src はパラメータです。 <button v-on:click.stop="doClick"></button> //stop:停止冒泡。相当于调用了e.stopPropagagation().
修飾子: 半角ピリオドで始まる特別なサフィックス。命令が特別な方法でバインドされる必要があることを示すために使用されます。
var vm = new Vue({ el: '#app', data: { firstName:'Gavin', lastName:'CLY' }, computed: { fullName:function(){ //this指向vm实例 return this.firstName + ' ' + this.lastName; } } })🎜🎜🎜計算されたプロパティ🎜🎜🎜
避免在模板中加入过重的业务逻辑,保证模版的结构清晰和可维护性。
1.基础例子
var vm = new Vue({ el: '#app', data: { firstName:'Gavin', lastName:'CLY' }, computed: { fullName:function(){ //this指向vm实例 return this.firstName + ' ' + this.lastName; } } })
<p>{{ firstName }}</p> //Gavin <p>{{ lastName }}</p> //CLY <p>{{ fullName }}</p> //Gavin CLY
注:此时对vm.firstName
和vm.lastName
进行修改,始终会影响vm.fullName
。
2.Setter
更新属性时带来便利
var vm = new Vue({ el:'#el', data:{ cents:100 }, computed:{ price:{ set:function(newValue) { this.cents = newValue * 100; }, get:function(){ return (this.cents / 100).toFixed(2); } } } })
表单控件
v-model:对表单元素进行双向数据绑定,在修改表单元素值时,实例vm中对应的属性值也同时更新,反之亦然。
var vm = new Vue({ el:'#app', data: { message: '', gender: '', cheched: '', multiChecked: '', a: 'checked', b: 'checked' } })
1. Text
输入框示例,用户输入的内容和vm.message直接绑定:
<input type="text" v-model="message" /> <span>Your input is : {{ message }} </span>
2. Radio
单选框示例:
<label><input type="radio" value="male" v-model="gender">男</lable> <label><input type="radio" value="famale" v-model="gender">女</lable> <p>{{ gender }}</p> //显示的是value值
3.Checkbox
单个勾选框,v-model即为布尔值,此时Input的value并不影响v-model的值。
<input type="checkbox" v-model="checked" /> <span>checked: {{ checked }} </span> //显示的是true/false
多个勾选框,v-model使用相同的属性名称,且属性为数组。
<label><input type="checkbox" value="1" v-model="multiChecked">1</label> <label><input type="checkbox" value="1" v-model="multiChecked">2</label> <label><input type="checkbox" value="1" v-model="multiChecked">3</label> <p>MultiChecked:{{ multiChecked.join{'|'} }}</p> //multiChecked:1|2
4.Select
单选
<select v-model="selected"> <option selected>A</option> <option>B</option> <option>C</option> </select> <span>Selected: {{ selected }}</span>
多选
<select v-model="multiSelected" multiple> <option selected>A</option> <option>B</option> <option>C</option> </select> <span>MultiSelected: {{ multiSelected.join('|') }}</span>
5.绑定value
通过v-bind实现,表单控件的值绑定到Vue市里的动态属性上。
Checkbox
<input type="checkbox" v-model="checked" v-bind:true-value="a" v-bind:false-value="b" />
选中:
vm.checked == vm.a //=> true
未选中:
vm.checked == vm.b //=>true
Radio
<input type="radio" v-model="checked" v-bind:value="a" >
选中:
vm.checked == vm.a //=> true
3.Select Options
<select v-model="selected"> <!-- 对象字面量 --> <option v-bind:value="{ number:123}">123</option> </select>
选中:
typeof vm.selected //=> object vm.selected.number //=> 123
6.参数特性
.lazy:默认情况下,v-model在input事件中同步输入框与数据,加lazy属性后会在change事件中同步。
<!-- 在 "change" 而不是 "input" 事件中更新 --> <input v-model.lazy="msg" >
.number:自动将用户输入转为Number类型,如果原值转换结果为NaN,则返回原值。
<input v-model.number="age" type="number">
.trim:如果要自动过滤用户输入的首尾空格,可以添加 trim 修饰符到 v-model 上过滤输入
<input v-model.trim="msg">
Class与Style绑定
1.Class绑定
对象语法:v-bind:class
接受参数是一个对象,而且可以与普通的class属性共存。
<p class="tab" v-bind:class="{'active':active,'unactive':!active}"></p>
vm实例中需要包含:
data:{ active:true }
渲染结果为:
<p class="tab active"></p>
数组语法:v-bind:class
也接受数组作为参数。
<p v-bind:class="[classA,classB]"></p>
vm实例中需要包括:
data:{ classA:"class-a", classB:"class-b" }
渲染结果为:
<p class="class-a class-b"></p>
使用三元表达式切换数组中的class
<p v-bind:class="[classA,isB?classB:""]"></p>
若
vm.isB = false
则渲染结果为
<p class="class-a"></p>
2.内联样式绑定(style属性绑定)
对象语法:直接绑定符合样式格式的对象。
<p v-bind:style="alertStyle"></p>
vm实例中包含:
data:{ alertStyle:{ color: 'red', fontSize: '2px' } }
<p v-bind:style="{fontSize:alertStyle.fontSize,color:'red'}"></p>
数组语法:v-bind:style
允许将多个样式对象绑定到同一元素上。
<p v-bind:style="[ styleObjectA,styleObjectB]" .></p>
3.自动添加前缀
在使用transform这类属性时,v-bind:style
会根据需要自动添加厂商前缀。:style
在运行时进行前缀探测,如果浏览器版本本省就不支持不加前缀的css属性,那就不会添加。
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上がvue.jsのデータバインディングの操作方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。