所有分类
  • 所有分类
  • 后端开发
Vue新手必读:如何在自定义组件中巧妙运用v-model?

Vue新手必读:如何在自定义组件中巧妙运用v-model?

v-model是vue的一个语法糖,限制在input和textarea等这些表单元素中,官网所给的例子也是仅限于表单组件v-model组件封装(类似弹窗组件),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。

你们有没有想过一个问题?就是v-model这个东西,它在vue里面可是个大热门!不过你知道吗,它只能用在表单元素上,就像input和textarea这些东西。官网上的例子也是只限于表单组件的使用。但是,如果我们想把v-model用到自定义组件中?那该怎么办?其实官网上的例子已经给出了很清晰的解释了,只是要是你太死脑筋的话,那就限制住了自己咯,没错说的就是我这个人-.-.其实,通过v-model在父组件中对显示和消失进行控制已经可以实现了。但是要注意,封装组件的value属性名是不能随便改的,必须叫value才行。为什么?你要看看源码才知道!所以,我们可以加上model属性来修改代码。当然了,我们也可以通过model属性来修改value这个属性名,达到同样的效果。不过要记住,如果你不加model属性的话,在props里面修改value属性名是没用的,因为默认情况下v-model会默认修改的还是value。你们还有没有想过一个问题?就是v-model这个东西,它在vue里面可是个大热门!不过你知道吗,它只能用在表单元素上,就像input和textarea这些东西。官网上的例子也是只限于表单组件的使用。但是,如果我们想把v-model用到自定义组件中?那该怎么办?其实官网上的例子已经给出了很清晰的解释了,只是要是你太死脑筋的话,那就限制住了自己咯,没错说的就是我这个人-.-.其实,通过v-model在父组件中对显示和消失进行控制已经可以实现了。但是要注意,封装组件的value属性名是不能随便改的,必须叫value才行。为什么?你要看看源码才知道!你们还有没有想过一个问题?就是v-model这个东西,它在vue里面可是个大热门!不过你知道吗,它只能用在表单元素上,就像input和textarea这些东西。官网上的例子也是只限于表单组件的使用。但是,如果我们想把v-model用到自定义组件中?那该怎么办?其实官网上的例子已经给出了很清晰的解释了,只是要是你太死脑筋的话,那就限制住了自己咯,没错说的就是我这个人-.-.所以,我们可以加上model属性来修改代码。当然了,我们也可以通过model属性来修改value这个属性名,达到同样的效果。不过要记住,如果你不加model属性的话,在props里面修改value属性名是没用的,因为默认情况下v-model会默认修改的还是value。以上就是小编给大家介绍的Vue中的v-model组件封装(类似弹窗组件)!希望对大家有所帮助。如果你们有什么疑问或者想法,请给我留言!小编会及时回复你们的。在此也非常感谢大家对我们网站的支持!文章到这里就要结束!希望大家能够喜欢这篇推文,并且留下你们宝贵的评论和互动!记得点赞和分享给你的朋友们,让更多人知道v-model的魅力!

Vue.component('base-checkbox', {
 model: {
  prop: 'checked',
  event: 'change'
 },
 props: {
  checked: Boolean
 },
 template: `
  
 `
})

Vue新手必读:如何在自定义组件中巧妙运用v-model?


  
这是v-model的弹窗组件
export default { props:{ value:{ type:Boolean, default:false } } }
import VModel from "./Vmodel" export default { components:{VModel}, data:function(){ return { value:true } } }

props:{
    value1:{ //失效
      type:Boolean,
      default:false
    }
  }

function transformModel (options, data: any) {
 const prop = (options.model && options.model.prop) || 'value' //子组件不存在options.model,默认给value
 const event = (options.model && options.model.event) || 'input'//event="input"
 ;(data.attrs || (data.attrs = {}))[prop] = data.model.value
 const on = data.on || (data.on = {})
 const existing = on[event] //undefined
 const callback = data.model.callback //f()
 if (isDef(existing)) { //false
  if (
   Array.isArray(existing)
    ? existing.indexOf(callback) === -1
    : existing !== callback
  ) {
   on[event] = [callback].concat(existing)
  }
 } else {
  on[event] = callback //把回调赋值给监听的函数
 }
}

原文链接:https://www.icz.com/technicalinformation/web/2024/03/11400.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?