mmu*_*niz 6 ajax jquery vue.js
我是Vue.js的新手,我试图创建一个没有成功的简单组件,它包含在一个selectList中,我正在尝试填充模拟Ajax请求的选项数据,这是我的代码:
HTML
<div id="app">
<my-select></my-select>
</div>
<template id="my-template">
<div>
<select v-model="team">
<option v-for="n in teams" v-bind:value="n.id">
{{n.name}}
</option>
</select>
<p>Selected Team: {{team}}</p>
</div>
</template>
Run Code Online (Sandbox Code Playgroud)
JS
Vue.component("my-select", {
template: "#my-template",
mounted: function() {
this.getTeams().then(function(data) {
this.teams = data;
});
},
data: function() {
return {
team: 0,
teams: []
}
},
methods: {
getTeams: function() {
var d = $.Deferred();
setTimeout(function() {
var teams = [
{id: 1, name: "Real Madrid"},
{id: 2, name: "Bayern München"}
];
d.resolve(teams);
}, 2000);
return d.promise();
}
}
});
new Vue({
el: "#app"
});
Run Code Online (Sandbox Code Playgroud)
我的小提琴:https://jsfiddle.net/3ypk60xz/2/
我感谢任何帮助
你有一个范围问题.请记住,function()在匿名声明时创建自己的范围,因此请this参考该函数.要解决此问题,请使用箭头函数(如果使用ES6)或设置指向正确上下文的变量var self = this:
ES6
mounted: function() {
this.getTeams().then(data => {
this.teams = data;
});
}
Run Code Online (Sandbox Code Playgroud)
ES5
mounted: function() {
var self = this;
this.getTeams().then(function(data) {
self.teams = data;
});
}
Run Code Online (Sandbox Code Playgroud)
这是您使用箭头功能更新的小提琴:https://jsfiddle.net/mrvymzgh/
在ES5中:https://jsfiddle.net/mrvymzgh/1/