如何在 vuejs3 应用程序的设置中调用方法?

mst*_*std 3 vue.js vuejs3 vue-composition-api

在 vuejs3 应用程序中,我使用 axios 方法从数据库中检索数据,例如:

<script>
  import appMixin from '@/appMixin'
  import app from './../../App.vue' // eslint-disable-line
  import axios from 'axios'

  const emitter = mitt()

  export default {
    name: 'adminCategoriesList',
    mixins: [appMixin],
    data: function () {
      return {
        categoriesPerPage: 20,
        currentPage: 1,
        categoriesTotalCount: 0,
        categories: []
      }
    },

    components: {
    },
    setup () {
      const adminCategoriesListInit = async () => {
        this.loadCategories() // ERROR HERE
      }

      function onSubmit (credentials) {
        alert(JSON.stringify(credentials, null, 2))
        console.log('this::')
        console.log(this)
        console.log('app::')
      }

      onMounted(adminCategoriesListInit)

      return {
        // schema,
        onSubmit
      }
    }, // setup

    methods: {
      loadCategories() {
        ...
      }
Run Code Online (Sandbox Code Playgroud)

我在浏览器的控制台中出现错误:

Cannot read property 'loadCategories' of undefined
Run Code Online (Sandbox Code Playgroud)

如果要删除“这个”。在 loadCategories 调用中我收到错误:

'loadCategories' is not defined
Run Code Online (Sandbox Code Playgroud)

我需要将 loadCategories 作为方法,因为我需要从不同的地方调用它。

哪种方式是正确的?

谢谢!

Bou*_*him 5

您可以在同一组件中使用组合和选项 api,但对于不同的属性和方法,在您的情况下,数据属性可以setup使用ref或在钩子内定义reactive,方法可以定义为普通的 js 函数:

import {ref} from 'vue'
 export default {
    name: 'adminCategoriesList',
    mixins: [appMixin],
    components: {
    },
    setup () {
        const categoriesPerPage= ref(20);
        const currentPage=ref(1);
        const categoriesTotalCount=ref(0),
        const categories=ref[])
 

      const adminCategoriesListInit = async () => {
       loadCategories()
      }

      function onSubmit (credentials) {
        alert(JSON.stringify(credentials, null, 2))
  
      }
      functions loadCategories(){
        ...
      }
      onMounted(adminCategoriesListInit)

      return {
        // schema,
        onSubmit,
        categoriesPerPage,
        currentPage,
        categoriesTotalCount,
        categories
      }
    },
Run Code Online (Sandbox Code Playgroud)

定义的属性ref可以由property.value模板使用/改变并在模板中使用{{property}}