Airtable 数据进入 Vue.js

Airtable data into Vue.js

我是 vue js 的新手,并且已经尝试了几个小时才能将 airtable 数据导入我的应用程序。我希望有人能帮助我,因为我觉得我快到了!我正在使用 Airtable NPM 包来检索数据 - https://www.npmjs.com/package/airtable

    <template>
  <section id="cards-section" class="cards-section">
    <div class="centered-container w-container">
      <h1>{{ msg }}</h1>
      <div class="cards-grid-container">
        <Card />
        <ul id="example-1">
          <li v-for="item in recordsList" v-bind:key="item">
            data here {{ item }}
          </li>
        </ul>
      </div>
    </div>
  </section>
</template>

<script>
import Card from "../components/Card.vue";
import Airtable from "airtable";

export default {
  name: "Main",
  components: {
    Card,
  },
  props: {
    msg: String,
  },
  data() {
    return {
      recordsList: [],
    };
  },
  mounted() {
    const base = new Airtable({ apiKey: "******" }).base(
      "******"
    );

    base("Table 1")
      .select({
        view: "Grid view",
      })
      .firstPage(function (err, records) {
        if (err) {
          console.error(err);
          return;
        }
        records.forEach( (record) => {
          console.log(record.get("Name"));
          return record.get("Name")
        });
      });
  },
};
</script>

<style scoped>
</style>

查看您的代码,您可能正处于已成功从 airtable 检索数据并在 console.log.

中看到一些记录的阶段

现在如何将它们从该函数内部获取到您的 Vue 实例:

我将向您展示两种解决此问题的方法,稍后再进行解释:

方法 1:使用对自身的引用。

<script>
import Card from "../components/Card.vue";
import Airtable from "airtable";

export default {
  name: "Main",
  components: {
    Card,
  },
  props: {
    msg: String,
  },
  data() {
    return {
      recordsList: [],
    };
  },
  mounted() {
    // create a reference to this vue instance here.
    var self = this;

    const base = new Airtable({ apiKey: "******" }).base(
      "******"
    );

    base("Table 1")
      .select({
        view: "Grid view",
      })
      .firstPage(function (err, records) {
        if (err) {
          console.error(err);
          return;
        }

        // now we can set the recordList of our
        // vue instance: 
        self.recordsList = records;
      });
  },
};
</script>

方法二:使用javascript箭头函数:

<script>
import Card from "../components/Card.vue";
import Airtable from "airtable";

export default {
  name: "Main",
  components: {
    Card,
  },
  props: {
    msg: String,
  },
  data() {
    return {
      recordsList: [],
    };
  },
  mounted() {
    // no need to create a reference this time.

    const base = new Airtable({ apiKey: "******" }).base(
      "******"
    );

    base("Table 1")
      .select({
        view: "Grid view",
      })
      .firstPage( (err, records) => {
        if (err) {
          console.error(err);
          return;
        }

        this.recordsList = records;

      });
  },
};
</script>

现在出了什么问题?在第一个示例中,我们使用普通的 javascript 匿名函数。 this 在一个普通的 javascript 匿名函数中并不是你所期望的那样。我们通过在某处定义对 this (var self = this) 的引用来解决这个问题,而不是尝试 this.recordsList 我们在我们的任意函数中做 self.recordsList。

Nem 对 javascript 语言的改进引入了另一种函数,即箭头函数。这个函数的一个好处是这个函数内部的 this 是你定义它的对象。所以,this 是我们的 vue 实例。现在我们没有问题,可以设置 this.recordsList.

我忽略的其他解决方案是:

  • 使用Function.bind
  • async/await