Vue.js如何从Json属性中获取键(左侧值)。

20

我有一个看起来像这样的对象:

{
  "id": 1,
  "name": "Customer",
  "parks": {
    "1": "Park a",
    "23": "Park b",
    "7": "Park c",
    "83": "Park d"
  },
  "users": {
    "11": "user@customer.com"
  }
}

parksusers左侧的值不是索引,而是园区的实际id。我如何在Javascript中访问这个值?

目前我使用Vue.Js,所以将该值绑定到组件时像这样:

<park-component v-for="park in customer.parks"
                            v-bind:prop="park"
                            v-bind:key="park.id">
</park-component>

然而,这只绑定了右侧的公园价值,即名称为“公园a”。我需要能够访问左侧。如果在Vue中无法实现,请问是否可以在脚本中完成?例如,我有:

"23": "公园b"

如何获取23

3个回答

40

解决方案

您可以使用v-for指令遍历对象并获取键。

<ul>
  <li v-for="(value, key) in object">{{ key }}: {{ value }} </li>
</ul>

例子

new Vue({
  template: `
    <ul>
      <li v-for="(value, key) in object">{{ key }}: {{ value }} </li>
    </ul>
  `,
  
  data: () => {
    return {
      object: {
        key1: 'value1',
        key2: 'value2',
        key3: 'value3',
      },
    };
  },
}).$mount('#root');
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
</head>
<body>
  <div id="root"></div>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.0.3/vue.js"></script>
</body>
</html>

更多阅读


2

park 中不存在 id 元素,可以使用以下方式使用 index

<park-component v-for="(park,index) in customer.parks"
                        v-bind:prop="park"
                        v-bind:key="index">
</park-component>

var parkComponent = Vue.extend({
    template: "<div>Key : {{park_key}}, Prop : {{prop}}</div>",
    props: ['prop','park_key']
});
var app = new Vue({
    el: "#vue-instance",
    data: {
      customer:{
        "id": 1,
        "name": "Customer",
        "parks": {
          "1": "Park a",
          "23": "Park b",
          "7": "Park c",
          "83": "Park d"
        },
        "users": {
          "11": "user@customer.com"
        }
      }
    },
    mounted() {
    },
    components: {
        parkComponent,
    },
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.1/vue.js"></script>
<div id="vue-instance">
    <park-component v-for="(park,index) in customer.parks"
                            v-bind:prop="park"
                            v-bind:park_key="index">
</park-component>
</div>

注意:在这里,key不起作用,因为key是保留字。应使用v-bind:key


2
你可以使用Object.keys获取键,然后进行循环 :) 我们提供了访问值的示例!

var test = {
  "id": 1,
  "name": "Customer",
  "parks": {
    "1": "Park a",
    "23": "Park b",
    "7": "Park c",
    "83": "Park d"
  },
  "users": {
    "11": "user@customer.com"
  }
};

var keys = Object.keys( test.parks );

for (var i = 0; i < keys.length; i++){
  console.log( test.parks[ keys[ i ] ] )
}


尽管这个方法可行,但比被接受的答案更慢且更复杂。 - Marco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接