look at the official definition of .sync first
v-model
both want to achieve the same goal, subcomponents and external data Synchronize, two-way binding
look at the official definition of .sync first
v-model
both want to achieve the same goal, subcomponents and external data Synchronize, two-way binding
come to a conclusion first: both are syntactic sugars in essence, and both aim to achieve two-way binding between components and external data. V-model is an embodiment of .sync. .sync is more flexible; v-model is more single
here is an official quote: the scope of the component instance is isolated. This means that the data of the parent component cannot (and should not) be referenced directly within the template of the child component. The data of the parent component needs to be sent to the child component through prop.
both sync and v-model send external data to the component through prop, and the component sends back the data that has changed internally through event.
on the code, you can directly execute a single file
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
</head>
<body>
<div id="vue-sync">
<h3>I'm sync</h3>
the input value is {{parentValue}}
<vue-sync :value.sync="value"></vue-sync>
<!--@update:value @update-->
<!--<vue-sync :value="parentValue" @update:value="val => parentValue = val"></vue-sync>-->
</div>
<div id="vue-v-model">
<h3>I'm v-model</h3>
the input value is {{value}}
<vue-model :value="value" @change="value = arguments[0]"></vue-model>
</div>
</body>
</html>
<script>
Vue.component('vue-sync', {
template: '<input :value="input_value" @change="input">',
props: ['input_value'],
methods: {
input: function () {
this.$emit('update:value', this.$el.value)
}
}
});
Vue.component('vue-model',{
template:'<input :value="input_value" @input="updateValue($event.target.value)">',
props:['input_value'],
methods:{
updateValue:function (val) {
this.$emit('change',val);
}
}
});
new Vue({
el: "-sharpvue-sync",
data: {
parentValue: 1
}
});
new Vue({
el:"-sharpvue-v-model",
data:{
value:1
}
})
</script>
v-model can only have one.
personal understanding, the other is the semantic difference. prop.sync
indicates that this child component modifies the value of the parent component, and v-model
indicates that it is a component of form type
.
v-model
v-model
binds value, which semantically refers to the value of the bound component. For example, v-model
of el-input
refers to the input value, .sync
.sync
is just a syntactic sugar bound in both directions, which allows the child component to modify the state of the parent component internally. For example, < el-dialog: visible.sync='dialogVisible' > < / el-dialog >
just means that the visible
state of the component el-dialog
can be changed within the component. both have bidirectional binding elements in common. The difference is that v-model
bidirectional binding is value
, and .sync
can bind any attribute (prop)
to sum up, that is to say,
if a component requires two-way bound properties,
is it worth it? Use v-model
, for example, the value of el-input
may be a string entered by the user, and the value of el-form
may be a=b&c=d
, or it may be {av lange breadth, cjoughd'}
if there is no value, for example, a dialog el-dialog
has only explicit and implicit status (visible.sync) and no value (of course, if you think it has a value, you can also use v-model
).
v-model is generally a form component, which binds the value property. The bidirectional binding of this value is not the relationship between the parent component and the child component, but the corresponding relationship between the view and the model, because the change in the value of the form component comes from the user input
, while the sync refers to the communication between the parent and child components
just can t show it. Thank you very much for your advice. ...
< H2 > now there is a strange situation, that is, when I use the Loadmore component, the pull-up load is not performed, only the drop-down refresh is performed. It only executes every time I change the location of the component, but after I refresh it, i...
like this [array [xxx], array [xxx], array [xxx].] merge all xxx in array into one array [xxx.] ...
1. Scrolling loading cannot be achieved with vue-waterfall,. The first screen displays normally. Scrolling to the bottom does not send ajax, and how to modify the current page 2. The code is as follows: script created ...
message is an empty object, var app = new Vue({ el: -sharpapp , data: { message: {}, }, and then in <input ... v-model="message.foo"> <input ... v-model="message.foo.bar"> how do ...
http: www.qqbsmall.com data .; > http: www.qqbsmall.com data .; > http: www.qqbsmall.com data .; > http: www.qqbsmall.com data .; > http: www.qqbsmall.com data .; > http: www.qqbsmall.com data .; > http: www.qqbsmall.com data ....
for projects created with vue-cli, the default webpack configuration is packaged into a single file. Now there is a need to package out many folders. The corresponding html,js and css in different folders have modified some configurations to be in the f...
I introduced another A.vue page in a B.vue page. Now click the method in A to adjust the method in B (with a form) this is the form < el-form: model= "dialogForm.data " > of A. <el-row> <el-input type="hidden" v-mode...
enter a newline character in the reverse apostrophe, which is output as is. How to make the newline character work ...
the resLoader plug-in causes the ios9 browser web page to go blank vue project ...
Vue the first button clicks to jump out of the countdown, and the second button clicks to jump out of the fixed data, but the data that pops out suddenly jumps back to the automatic countdown var app = new Vue ({ el: -sharpapp , data:{ ite...
each time nuxt uses keep-alive, to switch pages, it will empty the data in data, which is inconsistent with the performance of keep-alive in normal vue-cli-built projects. for example, the asynchronously acquired data I loaded in list is switched to i...
The problem with is that I have a vue plug-in (which uses vue install exports and can use plug-ins introduced by vue.use ()), and I want to use vuex to communicate between components in this plug-in. currently there are the following problems: what I...
whether a vue project can set the root domain name of the provider by reading web.config or config.json after packaging. in this way, even if the root domain name is redeployed in the background, the front end of the root domain name does not have to be...
now my project is to package css and js separately, and the directory structure after packaging is the same as before. before packing: csscssimages.. csscss.. .. : webpack.config.js csscss csscss I would like to ask all the great gods, what ...
when submitting the form, I have been reporting 415 errors and tried many ways. My own is not good, nor is my copy colleague s, but my colleague s will not report an error, exactly the same way. I don t know why. html have you ever encountered th...
upload financial bills. The front end parses nearly 300000 data when uploading files. When you click the upload button, you need to send these 300000 pieces of data to the backend. now you will report Message length exceeded maximum allowed length. w...
there is a mobile project currently in testing, using vue (2.2.2) + mint-ui for development, and I don t know how to handle compatibility. What method should be used to determine whether the current environment is working properly? I just looked at t...
nuxt 1.4 uses keepAlive, in nuxt, but I find that when the page component is switched, the data in data will be reset and emptied when entering the interface . Is this his bug? if there is a problem with the setting, how can I modify the setting? ...
use vue to do a nine-grid lucky draw, which is fast at the beginning, slow down after a few laps, and can control where to stop. There is a big lucky draw button in the middle of the prize. How to write the style, ask for advice ...