我有一个问题,我真的很困惑如何从形式绑定vue js获取 Value . 我试过 - > https://vuejs.org/v2/guide/forms.html#Select . 但我总是得到错误,如 - > Property or method "selected" is not defined on the instance but referenced during render. Make sure to declare reactive data properties in the data option. 我的代码出了什么问题?
Here is my code :
data: function() {
return {
data: {
options: {},
selected: ''
}
};
},
methods: {
Search: function() {
var vm = this;
var types = [
{
"id": "id",
"value": "ID"
},
{
"id": "title",
"value": "Title"
},
{
"id": "category",
"value": "Category"
},
{
"id": "username",
"value": "Nama User"
}
];
vm.data.options = types;
console.log(vm.data.selected);
}
}
Here is my html code :
<select v-model="selected" class="form-control sl">
<option v-for="option in data.options" v-bind:value="option.id">
{{ option.value }}
</option>
</select>
3 回答
@ kevlai22已经给你一个可运行的代码片段,我想告诉你为什么你得到了警告消息属性或方法"selected"没有在实例上定义但在渲染期间被引用 . 确保在数据选项中声明反应数据属性 .
这只是因为您使用嵌套数据对象返回数据对象,因此
v-model="selected"
将无效,但v-model="data.selected"
将无效 . 实际上,您不需要返回嵌套对象,只需使用这样的代码 .检查working demo .
methods
不会以这种方式使用,并且您实际上根本不需要任何方法来获取value
. 这是一个有效的例子:抱歉,稍微误读了您的帖子,请忽略数据部分 . 没意识到你在数据中创建了一个数据对象 . 以下是与您的代码紧密匹配的代码示例 . 这里的问题是,当单击按钮时,它会将新元素添加到搜索下拉列表中,但您还没有实际选择任何内容,因此控制台输出将是一个空字符串 . 如果您随后选择了某些内容并再次单击该按钮,则会获得一个值 .
只是注意,我还将
v-model="selected"
更改为v-model="data.selected"
,因为您选择的变量是数据对象的属性,这是您在此范围内可用的唯一变量 .