vue+typescript+vue-property-decorator中v-model联动总结

最近的项目使用的技术栈为 vue + typescrit + vue-property-decorator

可以不使用 vue模版组件,通过 'vue-property-decorator'插件,写出oo风格的组件

其中的 v-model 和 .vue 模版有些区别
import { Vue, Component, Prop, Watch } from 'vue-property-decorator'

@Component
export default class Son extends Vue {
    // @Prop ({default: ''}) str! :string
    @Prop () value!: string
    // @Prop ({type: Array}) value!: any[]
    @Prop ({type: Array}) data!: any[]
    @Prop ({type: Number}) num!: number
    // value 是 联动的 是 ‘v-model’ 最好value 结合 model ,
    // 此处是value 结合 tempStr,也可达到效果,但是prop 一定是 value
    // str  不是联动的
    // data 是联动的
    // model = this.value
    tempData = this.data
    tempStr: string = this.value
    tempNum = this.num

    @Watch ('value')
    onValueChange() {
        // this.model = this.value
        this.tempStr = this.value
        console.log('son value changes....')
    }
    @Watch('tempStr')
    onModelChange(val) {
        console.log('son model changes...')
        // this.$emit('input',this.tempStr)
    }
    @Watch ('data') 
    onDataChange() {
        // 此处 数据会联动, 但不会进入到这里
        console.log('data changes')
        this.tempData = this.data
    }
    @Watch ('str') 
    onStrChange() {
        console.log('whosd changes')
        this.tempStr = this.str
    }
    @Watch ('tempStr') 
    onTempArr() {
        console.log('tempArr changes...')
    }
    
    render () {
        return (
            

    {this.tempData.map(item=>{ return (
  • ) })}
) } }

Prop是 对象时,数据通过 v-model时,改变时,会修改data和Prop,并且会修改 父组件传入的对象,不通过 v-model,通过prop 也可以达到同样效果,命名不要求时 value 和 model
Prop是 字符串,布尔值,数字时,数据通过 v-model时,改变时,会修改data但是不会修改Prop,也不会修改 父组件传入的值
Prop 中是value时,data最好命名为 model,但命名为其他也可以达到效果,
需要在:注意⚠️ 如果value是对象类型时,是不需要下面 $emit()

@Watch('model')
    onModelChange(val) {
        this.$emit('input',this.model)
    }
在父组件中调用
import Son from './Son.tsx'
....
render () {
        return (
            
) }

你可能感兴趣的:(vue+typescript+vue-property-decorator中v-model联动总结)