【问题标题】:Vue.js how to get key (left side value) from Json property.Vue.js 如何从 Json 属性中获取键(左侧值)。
【发布时间】:2017-11-07 10:09:45
【问题描述】:

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

{
  "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>

但是,这仅绑定右侧的 park 值,即名称“park a”。我还需要能够访问左侧。如果不能通过 Vue 中的 html,可以在脚本中完成吗?即如果我有:

"23": "park b"

我怎样才能得到23

【问题讨论】:

    标签: javascript vue.js


    【解决方案1】:

    解决方案

    您可以使用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】:

      你首先得到密钥: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 ] ] )
      }

      【讨论】:

      • 虽然这可行,但它比公认的答案更慢且更复杂。
      【解决方案3】:

      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>

      注意 : keyv-bind:key 中不起作用,因为 key 是保留的

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-08
        • 1970-01-01
        • 2018-05-06
        • 2016-03-04
        • 2014-02-02
        • 2012-12-04
        相关资源
        最近更新 更多