在 Vuejs 中渲染输入字段

Posted

技术标签:

【中文标题】在 Vuejs 中渲染输入字段【英文标题】:Rendering input fields in Vuejs 【发布时间】:2019-05-24 23:04:24 【问题描述】:

我正在学习如何在Vuejs 中呈现html 内容我正在尝试构建一个从render 函数生成的小型输入组件。它看起来像这样:

export default 
    name: "nits-input",
    methods: 

    ,
    props: 
        label: String,
        hint: String,
        error: String,
        placeholder: String
    ,
    render (createElement) 

        //Help action text
        let helpText = this.hint ? createElement('span',  class: 'm-form__help' , this.hint) : ''

        //Error Text
        let errorText = this.error ? createElement('span',  class: 'm--font-danger' , this.error) : ''

        return createElement('div',  class: '', [
            createElement('label', this.label),
            createElement('input', 
                class: 'form-control m-input',
                attrs:  type: this.type, placeholder: this.placeholder ,
                domProps:  value: self.value,
                on: 
                    input: function (event) 
                        this.$emit('input', event.target.value)
                    
                
            ),
            helpText, errorText
        ])
    

在调用此组件时,我正在执行以下操作:

<div class="form-group m-form__group">
    <nits-input
            label="Email Address"
            type="email"
            hint="We'll never share your email with anyone else."
            placeholder="Enter email"
            v-model="email"
    >
    </nits-input>
</div>
<div class="form-group m-form__group">
    <nits-input
            label="Password"
            type="password"
            placeholder="Enter password"
            v-model="password"
    >
    </nits-input>
</div>

我希望将值存储到 v-model 中,以检查值是否设置正确我正在使用监视功能

watch: 
    email () 
        console.log('Email v-model defined as '+this.email)
    ,
    password() 
        console.log('Password v-model defined as '+this.password)
    

但这总是给我错误:

未捕获的类型错误:无法读取 null 的属性“$emit”

我从This VueJS Documentation Link 获取了参考资料。帮我解决这个问题。谢谢。

【问题讨论】:

【参考方案1】:

你应该使用箭头函数,因为你失去了回调中的范围:

on: 
   input:(event)=> 
      this.$emit('input', event.target.value)
             
    

【讨论】:

以上是关于在 Vuejs 中渲染输入字段的主要内容,如果未能解决你的问题,请参考以下文章

Vuejs 根据从下拉列表中选择的值显示其他输入字段

VueJs - 使用输入字段创建子组件的正确方法是啥

使用 VueJs 添加动态输入字段

Vue JS - 如何限制输入字段中的特殊字符?

在 React 中渲染动态输入字段

如何使用从数据库预填充的 vuejs 字段进行验证?