主要是要介紹v-model
,不過他也只是語法糖。
有一些地雷要注意
v-model
不會在ime輸入中得到更新。< input v-model="message" placeholder="edit me" >
< p >Message is: { { message } }< /p >
Javascript
data: {
message: '{{ message }}'
}
Result
Message is: {{ message }}
< span >Multiline message is:< /span >
< p style="white-space: pre-line" >{ { message } }< /p >
< br >
< textarea v-model="message" placeholder="add multiple lines" >< /textarea >
在< textarea >< /textarea >
插值並不會動作,必須加v-model
。
data: {
message: '{{ message }}'
}
Result
{{ message }}
當作開關: true | false
HTML< input type="checkbox" id="checkbox" v-model="checked" >
< label for="checkbox" >{ { checked } }< /label >
Javascript
data: {
checked: {{ checked }}
}
Result當作多選: 成為新陣列
HTML< div id='example-3' >
< input type="checkbox" id="jack" value="Jack" v-model="checkedNames" >
< label for="jack" >Jack< /label >
< input type="checkbox" id="john" value="John" v-model="checkedNames" >
< label for="john" >John< /label >
< input type="checkbox" id="mike" value="Mike" v-model="checkedNames" >
< label for="mike" >Mike< /label >
< br >
< span >Checked names: { { checkedNames } }< /span >
< div >
Javascript
data: {
checkedNames: {{ checkedNames }}
}
Result
< input type="radio" id="one" value="One" v-model="picked" >
< label for="one" >One< /label >
< br >
< input type="radio" id="two" value="Two" v-model="picked" >
< label for="two" >Two< /label >
< br >
< span >Picked: { { picked } }< /span >
Javascript
data: {
picked: '{{ picked }}'
}
Result< select v-model="selected1" >
< option disabled value="" >Please select one< /option >
< option >A< /option >
< option >B< /option >
< option >C< /option >
< /select >
< span >Selected: { { selected1 } }< /span >
如果 v-model
的初始值沒有任何匹配的選項,
< select>元素就會以「未選擇」的狀態渲染。
在iOS中,這樣使用者將無法選擇第一個選項,因為這樣的情況下,iOS不會引發change事件。
因此,像以上提供 disabled
選項是建議的做法。
data: {
selected1: '{{ selected1 }}'
}
Result複選選單
HTML< select v-model="selected2" multiple >
< option >A< /option >
< option >B< /option >
< option >C< /option >
< /select >
< br >
< span >Selected: { { selected2 } }< /span >
Javascript
data: {
selected2: '{{ selected2 }}'
}
ResultKey-value的選項
HTML< select v-model="selected1" >
< option v-for="option in options" v-bind:value="option.value" >
{ { option.text } }
< /option >
< /select >
< span >Selected: { { selected1 } }< /span >
Javascript
data: {
selected1: '{{ selected1 }}',
options: [
{ text: 'One', value: 'A' },
{ text: 'Two', value: 'B' },
{ text: 'Three', value: 'C' }
]
}
Result可以看成一種使用者可以操作的if
判斷式
type=radio
, checkbox
的input
,還有select
的option
它們的值都是static string。選上了就將html
裡的值,賦值到Javascrit
< !-- `picked` is a string "a" when checked -- >
< input type="radio" v-model="picked" value="a" >
< !-- `toggle` is either true or false -- >
< input type="checkbox" v-model="toggle" >
< !-- `selected1` is a string "abc" when selected1 -- >
< select v-model="selected1" >
< option value="abc" >ABC< /option >
< /select >
Result
< input
type="checkbox"
v-model="toggle"
v-bind:true-value="a"
v-bind:false-value="b" >
// when checked:
vm.toggle === vm.a
// when unchecked:
vm.toggle === vm.b
data: {
toggle: {{toggle}},
a: {{a}}, //static string
b: {{b}} //static string
}
Result< input type="radio" v-model="picked" v-bind:value="c" >
// when checked: vm.picked === vm.c
Javascriptdata: {
picked: '{{picked}}',
c: '{{c}}', //static string
d: '{{d}}' //static string
}
Result< select v-model="selected2" >
< !-- inline object literal -- >
< option v-bind:value="{ number: 123 }" >123< /option >
< /select >
// when selected2:
typeof vm.selected2 // => 'object'
vm.selected2.number // => 123
data: {
selected2: {{selected2}}
}
Result
.lazy
讓修改值的行為,在失去focus
時執行,而不是像一般的情況在change
時執行。
< !-- synced after "change" instead of "input" -->
< input v-model.lazy="msg" >
Javascript
data: {
msg: '{{msg}}'
}
Resultlazy
lazy
.number
轉態成數字的變數型態
HTML< input v-model.number="age" type="number" >
Javascript
data: {
age: {{age}} //is a {{typeof(age)}}
}
Resultnumber
number
.trim
< input v-model.trim="msg" >
Javascript
data: {
msg: '{{msg}}'
}
Resulttrim
trim
v-model
with Components直接看組件的自定義事件