Reputation: 7938
Given this Vue 2 component:
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,
};
},
});
Usage (HAML):
%read-more{v: {bind: '{text: some_object.property}' }}
Everything works fine but I get Vue warnings for all the declared props:
[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.
What am I doing wrong?
EDIT
I've created a fiddle which works just fine: http://jsfiddle.net/oLt9wkxe/8/
In my app though, this component is nested within a few other components. It works perfectly fine but shows these warnings which are annoying!
Upvotes: 8
Views: 11312
Reputation: 2830
This attribute will send a string
myBoolValue=false
This attribute will send a boolean
:myBoolValue="false"
This is forcing the type and raise exception
props: { myBoolValue: Boolean }
This won't complain but you will get a string instead of the boolean value
props: [ "myBoolValue" ]
All my code as recomanded example:
const MyTable = Vue.component("my-table", {
props: {
myBoolValue: Boolean // Force type
myStringValue: String,
myObject: Object
},
<my-table
ref="otbExpertTable_user"
:myBoolValue="false"
v-bind:is-mobile="isMobile"
v-on:hover-item="hoverItem"
:myObject=metaUsers
/>
Upvotes: 1
Reputation: 12927
You see this warning only on your local version because of the linter which is installed when you create your app via vue-cli.
'{text: some_object.property}'
is obviously an object - there is a key and a value.
I don't know HAML specification but I strongly suspect that you should just use bind: 'some_object.property'
.
Upvotes: 0