vue.js - vue单文件组件之间如何传递数据
问题描述
我在 vue 中有(我的第一个)应用程序,它从 api 获取数据并呈现一些选择元素。我想将每个框分隔到另一个文件(一个文件用于从 api 获取数据,第二个用于渲染选择,第三个用于渲染列表)。我如何从
我试图从 api 实例获取数据:
export default {
props: {
filters: apiIntance.$data.kpis.filters,
此刻我有这样的事情:
<!-- src/components/Filters.vue -->
<template>
<div class="filters">
<label v-bind:key="filter.id" v-for="filter in filters">
<select class="js-selectbox">
<option v-bind:value="item.id" v-bind:key="item.id" v-for="item in filter.items">{{item.name}}</option>
</select>
</label>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import Api from './ApiTest.vue';
export default {
props: {
filters: //Get Data from ApiTest.vue
},
};
</script>
<!-- src/components/ApiTest.vue -->
export default Vue.extend({
data(): DataObject {
return {
kpis: {
...
},
};
},
您是否有一些提示如何在一个文件中获取数据并将其传播到其他文件?
解决方案
有很多方法,仅举几例
one file for get data from api
不需要是 vue 实例。你可能想添加更多的钩子。
// ApiService.ts
export const ApiService = { getData: () => {/**/} }
// src/components/Filters.vue
...
<script lang="ts">
import Vue from 'vue';
import {ApiService} from '@/.../ApiService'
export default {
data: () => ({
filters: []
}),
created() {
ApiService.getData().then(data => this.filters = data)
}
};
</script>
- 您当然可以创建一个 Vue 实例来提供数据,使其具有反应性和组件独立于数据逻辑。例如:
// ApiService.ts
const ApiService = new Vue({
data: () => ({
filters: []
}),
created() {
request().then(data => this.filters = data)
}
})
// src/components/Filters.vue
...
<script lang="ts">
import Vue from 'vue';
import {ApiService} from '@/.../ApiService'
export default {
computed: {
filters() {
return ApiService.filters
}
}
};
</script>
推荐阅读
- google-app-engine - 如何在 Google App Engine 中使用 Ruby 2.5 部署 Rails 5
- python - Selenium Python get_element by ID 失败
- rust - 如何在不破坏借用规则的情况下包装可窥视的迭代器
- php - 为什么我的 textarea 中提交的文本呈现为单行?
- php - 在数组 PHP 中添加键
- c++ - 将变量从主窗口传递到另一个 qt c++ 表单
- javascript - 输入长度未定义
- .htaccess - 使用条件重定向 301
- python - DataFrame max() 不返回最大值
- node.js - React 页面显示内容,然后仅在 node.js 上一秒钟后关闭