typescript - Vuejs - 与 typecipt 模型类的两种方式绑定
问题描述
我正在尝试基于具有打字稿模型类的现有打字稿类结构设置一个新的 VueJs 应用程序。我需要如何集成 vuejs 双向绑定可以与它们一起使用的模型(识别模型上的更新)?
我试图导入模型类“人”并将它们设置为类变量。
<template>
<form>
<input type="text" v-model="person.name" />
{{person.name}}
</form>
</template>
<script lang="ts">
import {Person} from '@/models/person';
import Vue from 'vue';
import {Component} from 'vue-property-decorator';
@Component({})
export default class Home extends Vue{
public person! : Person;
created(){
this.person = new Person();
}
}
</script>
--- Following person.ts:
export class Person{
public name : string;
public birthday: Date;
}
我的期望是更改“名称”的输入字段“{{name}}”也会更改...目前仅调用 this.$forceUpdate(); 诀窍:(
解决方案
我认为问题在于您如何定义person
. !
in:public person! : Person;
是非空断言运算符,这意味着变量永远不会是null
or undefined
。
由于您没有在该表达式中为其分配值,因此您基本上是在编写:
public person!: Person = undefined;
我相信如果您删除创建的功能并且只是这样做:
public person: Person = new Person();
,它会像你期望的那样工作。
编辑
由于person
是一个道具,您需要Person
从实现您的组件的父级传递一个已经实例化的对象。
您的父组件需要看起来像这样:
<template>
<div>
<home :person="person"></home>
</div>
</template>
<script lang="ts">
import Home from "@/components/home";
import Person from "@/models/person";
@Component({})
export default class Parent extends Vue {
private person: Person = new Person();
}
</script>
然后孩子(Home
你的例子中的组件)会像这样使用它:
<template>
<form>
<input type="text" v-model="person.name" />
{{person.name}}
</form>
</template>
<script lang="ts">
import {Person} from '@/models/person';
import {Vue, Component} from 'vue-property-decorator';
@Component({})
export default class Home extends Vue {
@Prop()
public person!: Person;
}
</script>
推荐阅读
- java - Firebase 实时数据库 - 检索数据 Android Studio
- azure - 当另一个流水线在另一个数据工厂上完成时运行流水线
- hadoop - 决定为 Hadoop map reduce 程序中最快处理指定的最佳 reducer 数量
- node.js - sequelize-hierarchy 未找到
- python - 尝试通过计数多字段 Django 对标签进行排序
- python - 用于文本分类的词嵌入
- reactjs - 停止挂载/卸载,通过防止卸载来保持组件存活
- laravel - laravel 尝试存储多个图像,但只存储它们多次
- java - 为什么我的日志文件没有在本地资源管理器中创建?
- python - .h5 keras 模型和 .json tensorflow.js 模型的预测结果完全不同