Mik*_*gel 3 typescript vue.js vue-component vue-class-components
我只是想知道哪种方式定义属性最可靠,它应该在模板中生成输出。
模板参考:
<h1>{{msg}}</h1>
Run Code Online (Sandbox Code Playgroud)
属性定义:
<script lang="ts">
import { Component, Vue } from "vue-property-decorator";
@Component
export default class Test extends Vue {
protected msg: string;
public constructor() {
super();
this.msg = 'Today\'s date ' + moment().format('YYYY/MM/DD');
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
浏览器中的输出:
<h1>Today's date 2019/03/07</h1>
Run Code Online (Sandbox Code Playgroud)
模板参考:
<h1>{{msg}}</h1>
Run Code Online (Sandbox Code Playgroud)
属性定义:
export default class Test extends Vue {
protected msg: string = '';
mounted() {
this.msg = 'Today\'s date ' + moment().format('YYYY/MM/DD');
}
}
Run Code Online (Sandbox Code Playgroud)
浏览器中的输出:
<h1>Today's date 2019/03/07</h1>
Run Code Online (Sandbox Code Playgroud)
模板参考:
<h1>{{msgText}}</h1>
Run Code Online (Sandbox Code Playgroud)
属性定义:
export default class Test extends Vue {
protected msg: string = '';
public constructor() {
super();
this.msgText = 'Today\'s date ' + moment().format('YYYY/MM/DD');
}
get msgText(): string {
return this.msg;
}
set msgText(msg:string) {
this.msg = msg;
}
}
Run Code Online (Sandbox Code Playgroud)
浏览器中的输出:
<h1>Today's date 2019/03/07</h1>
Run Code Online (Sandbox Code Playgroud)
第二种使用方法mounted
优于其他方法。我建议的唯一改变是使用created
hook 而不是mounted
:
export default class Test extends Vue {
protected msg: string = '';
created() {
this.msg = 'Today\'s date ' + moment().format('YYYY/MM/DD');
}
}
Run Code Online (Sandbox Code Playgroud)
一般来说,对于简单的属性,可以在声明时直接赋值。当你的任务不简单时使用created。
另外,在编写基于类的组件时,我们并没有真正使用构造函数。背后的原因是 Vue.js 组件本质上是基于对象的。装饰@Component
器最终使组件的行为类似于基于对象的组件。
此外,如果您查看 Vue.js 组件生命周期方法,就会发现没有构造函数的位置。最初的方法有beforeCreate
-> data
-> created
->mounted
等。beforeCreate如何在没有实际调用构造函数的情况下执行?这个品牌的推理真的很奇怪。
注 1:对于 Vue.js 版本 3,建议使用官方基于类的组件。因此,这种情况可能在不久的将来发生改变。
注 2:TypeScript 会在编译后将msg
声明移至构造函数,Vue.js 似乎可以很好地使用它。但这仍然是未指定的,最好避免。
归档时间: |
|
查看次数: |
10928 次 |
最近记录: |