v-on:click 事件 Vue.js 显示用户帖子 [英] v-on:click event Vue.js to show user posts

查看:19
本文介绍了v-on:click 事件 Vue.js 显示用户帖子的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是一名学生,我刚刚接触 Vue.js,所以我对它还是很陌生.现在我正在制作一个项目,我从 API 获取用户名,当您单击用户时,它必须显示相关帖子,但这不起作用.当我单击带有 v-on:click 事件的按钮时.没有任何反应,即使在控制台中也没有.所以我希望有人能帮助我解决我的问题,我将不胜感激.

main.js:

const app = new Vue({el: "#app",数据: {用户:[],帖子:[],},方法: {Showpost(id, i) {fetch("https://jsonplaceholder.typicode.com/posts?userId=" + id).then(response => response.json()).then((数据) => {this.posts = 数据;})},},安装(){fetch("https://jsonplaceholder.typicode.com/users").then(response => response.json()).then((数据) => {this.users = 数据;})},模板:`<div><td v-for="user, i in users"><button v-on:click="Showpost(user.id, i)" >{{ user.name }}</button></td><h1>{{ posts.title }}</h1>

`,});

html:

<html lang="zh-cn"><头><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"><title>用户</title><身体><h1>用户</h1><div id="应用程序">

<script src="https://unpkg.com/vue"></script><script src="./main.js"></script>

json 用户:

<代码>{身份证":1,"name": "Leanne Graham","用户名": "布雷特","email": "Sincere@april.biz",地址": {"street": "库拉斯之光","suite": "公寓 556","city": "格温伯勒","邮政编码": "92998-3874",地理":{纬度":-37.3159","lng": "81.1496"}},"电话": "1-770-736-8031 x56442","网站": "hildegard.org",公司": {"name": "罗马格拉-克罗纳","catchPhrase": "多层客户端-服务器神经网络","bs": "利用实时电子市场"}}

json 帖子:

<代码>{用户 ID":1,身份证":1,"title": "sunt aut facere repellat Provident occaecati excepturi optio reprehenderit","body": "quia et suscipit
suscipit recusandae consequuntur expedita et cum
reprehenderit Molestiae ut ut quas totam
nostrum rerum est autem sunt rem eveniet architecto"}

解决方案

尝试创建一个名为 post 的属性,并通过分配 this.post= 在每次点击指定用户时更新它数据[i]:

new Vue({el: "#app",数据: {用户:[],帖子:[],邮政: ''},方法: {Showpost(id, i) {fetch("https://jsonplaceholder.typicode.com/posts?userId=" + id).then(response => response.json()).then((数据) => {this.post = 数据[i];})},},安装(){fetch("https://jsonplaceholder.typicode.com/users").then(response => response.json()).then((数据) => {this.users = 数据;})},模板:`<div class="flex"><div v-for="user, i in users"><button class="btn" v-on:click="Showpost(user.id, i)" >{{ user.name }}</button>

<h1>{{ post.title }}</h1>

`,});

.flex{显示:弹性;弹性包裹:包裹;}

<头><meta name="description" content="Vue.delete"><meta charset="utf-8"><meta name="viewport" content="width=device-width"><title>JS Bin</title><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwgnJ8ER"cross;<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.2.1/vue.min.js"></script><身体><div id="应用程序">

I'm a student and I'm just getting into Vue.js so I'm still very new to it. Right now I'm making a project where I'm getting usernames from an API and when you click on the user it has to show the related post, but this is not working. When I click the button with the v-on:click event. nothing happens, not even in the console. So I hope someone can help me with my problem, I would really appreciate it.

main.js :

const app = new Vue({
el: "#app",
data: {
  users: [],
  posts: [],
},
methods: {
  Showpost(id, i) {
    fetch("https://jsonplaceholder.typicode.com/posts?userId=" + id)
    .then(response =>response.json())
    .then((data) => {
      this.posts = data;
    })
  },
},
mounted() {
  fetch("https://jsonplaceholder.typicode.com/users")
    .then(response => response.json())
    .then((data) => {
      this.users = data;
    })
},
template: `
<div>

  <td v-for="user, i in users">
    <button v-on:click="Showpost(user.id, i)" >{{ user.name }}</button>
  </td>
  <h1>{{ posts.title }}</h1>
</div>
`,
});

html :

<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
<title>Users</title>
</head>

<body>
<h1>Users</h1>

<div id="app">

</div>

<script src="https://unpkg.com/vue"></script>
<script src="./main.js"></script>
</body>

</html>

json users :

{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz",
"address": {
  "street": "Kulas Light",
  "suite": "Apt. 556",
  "city": "Gwenborough",
  "zipcode": "92998-3874",
  "geo": {
    "lat": "-37.3159",
    "lng": "81.1496"
  }
},
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org",
"company": {
  "name": "Romaguera-Crona",
  "catchPhrase": "Multi-layered client-server neural-net",
  "bs": "harness real-time e-markets"
}
}

json posts :

{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit
suscipit recusandae consequuntur expedita et cum
reprehenderit molestiae ut ut quas totam
nostrum rerum est autem sunt rem eveniet architecto"
}

解决方案

Try to create a property called post and update it on every click on a specified user by assigning this.post=data[i]:

new Vue({
  el: "#app",
  data: {
    users: [],
    posts: [],
    post: ''
  },
  methods: {
    Showpost(id, i) {
      fetch("https://jsonplaceholder.typicode.com/posts?userId=" + id)
        .then(response => response.json())
        .then((data) => {
          this.post = data[i];

        })
    },
  },
  mounted() {
    fetch("https://jsonplaceholder.typicode.com/users")
      .then(response => response.json())
      .then((data) => {
        this.users = data;
      })
  },
  template: `
<div class="flex">

  <div v-for="user, i in users">
    <button class="btn" v-on:click="Showpost(user.id, i)" >{{ user.name }}</button>
  </div>
  <h1>{{ post.title }}</h1>
</div>
`,
});

.flex{
display:flex;
flex-wrap:wrap;
}

<!DOCTYPE html>
<html>

<head>
  <meta name="description" content="Vue.delete">
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.2.1/vue.min.js"></script>
</head>

<body>
  <div id="app">

  </div>

这篇关于v-on:click 事件 Vue.js 显示用户帖子的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
前端开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆