【发布时间】:2018-06-01 09:49:59
【问题描述】:
我正在尝试设置一个向后端发出请求然后在页面上显示结果的 vue 应用程序。我做了这个例子
new Vue({
data: {
message: '{}'
},
el: '.login-app',
});
Vue.component('message-section', {
template: '<div>Message Section</div>'
});
Vue.component('login-component', {
template: '<div><button v-on:click="login(\'mike@fake.com\', \'passwd\')">Login</button></div>',
methods: {
login: function (username, password) {
axios.post("http://192.168.1.10:8080/login", {username: username, password: password})
.then(response => {this.message = response.data})
}
}
});
还有一个类似的索引:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Vue Test</title>
</head>
<body>
<div class="login-app">
{{ message }}
<message-section></message-section>
<login-component></login-component>
</div>
<script src="/static/testvue.bundle.js"></script>
</body>
</html>
这个想法是一个简单的应用程序,它应该发送用户名/密码并返回“成功”或它可以显示的任何内容。但是我对 vue 和 javascript 完全不熟悉,所以我被卡住了。我不确定如何使响应出现在任何地方。我在那里有一个{{ message }},但它什么也没做。我所看到的只是 Vue 对象的“message”属性中的 {},我猜是渲染的。而且这些用户/密码是硬编码的……我不知道如何使它与表单字段一起工作。
我可以看到数据被发送到后端,所以我知道它正在工作......
此外,如何构建一个 Vue 项目,以便将其分解为多个“模块”或其他什么?
编辑:
如果我改变它,那么只有一个这样的组件:
new Vue({
data: {
message: '{}'
},
el: '.login-app',
methods: {
login: function (username, password) {
axios.post("http://192.168.91.30:8080/login", {username: username, password: password})
.then(response => {this.message = response.data})
}
}
})
和
<div class="login-app">
{{ message }}
<button v-on:click="login(\'mike@fake.com\', \'passwd\')">Login</button>
</div>
然后什么都没有渲染...这应该将它们放在同一个容器或其他什么中,对吧?
【问题讨论】:
-
这里的核心问题是
message是在根 Vue 中声明的数据属性,但您正试图从无法直接访问它的组件中设置它。通常,如果您想更改子组件的值,则需要将值 $emit 给父组件。 -
我不知道这意味着什么......但我稍微编辑了我的问题
标签: javascript vue.js vuejs2 axios