【发布时间】:2017-07-10 23:42:42
【问题描述】:
鉴于这个 Vue 2 组件:
Vue.component('read-more', {
props: {
'text': String,
'clamp': {
type: String,
default: 'Read More'
},
'less': {
type: String,
default: 'Read Less'
},
'length': {
type: Number,
default: 100
}
},
template: `
<p>
<span v-if="!show">{{truncate(text)}} <a href="javascript:;" v-if="text.length >= length" @click="toggle()">{{clamp}}</a></span>
<span v-if="show">{{text}} <a href="javascript:;" @click="toggle()" v-if="text.length >= length">{{less}}</a></span>
</p>
`,
methods: {
truncate(string) {
if (string) {
return string.toString().substring(0, this.length);
}
return '';
},
toggle() {
this.show = !this.show;
},
},
data() {
return {
show: false,
counter: this.length,
};
},
});
用法(HAML):
%read-more{v: {bind: '{text: some_object.property}' }}
一切正常,但我收到所有声明的道具的 Vue 警告:
[Vue warn]: Invalid prop: type check failed for prop "text". Expected , got String.
[Vue warn]: Invalid prop: type check failed for prop "clamp". Expected , got String.
[Vue warn]: Invalid prop: type check failed for prop "less". Expected , got String.
[Vue warn]: Invalid prop: type check failed for prop "length". Expected , got Number.
我做错了什么?
编辑
我创建了一个可以正常工作的小提琴:http://jsfiddle.net/oLt9wkxe/8/
不过,在我的应用程序中,这个组件嵌套在其他几个组件中。它工作得很好,但显示了这些令人讨厌的警告!
【问题讨论】:
-
嗨!你想通了吗?编辑:在我的模板中我忘了绑定属性:必须写
:prop="true"而不仅仅是prop="true"。 -
@Ehvince 我已经在使用 Vue 绑定,但仍然出现这些错误。最后,我只是从我的组件中删除了类型检查。
-
以上所有信息让我相信某处存在编译错误(HAML 问题?过时的 VueJS?)。如果示例 jsfiddle 没有警告但您的应用显示警告,则需要更多信息。我建议使用 jsfiddle(简单)示例并在您的开发环境中尝试一下,看看是否出现警告。
标签: javascript haml vuejs2 vue-component