4 回答

TA貢獻1797條經驗 獲得超4個贊
您可以在 vue 3 中定義全局屬性:
app.config.globalProperties.appName= 'vue3'
使用setup
(composition api) 您可以使用getcurrentinstance來訪問該屬性:
import { getCurrentInstance } from 'vue'
...
setup() {
const app= getCurrentInstance()
console.log(app.appContext.config.globalProperties.appName)
由于您仍然可以使用選項 api,您可以簡單地執行以下操作:
mounted(){
console.log(this.appName)
}

TA貢獻1799條經驗 獲得超9個贊
看來你需要provide / inject。在你的App.vue
:
import { provide } from 'vue';
export default {
setup() {
provide('appName', 'vue3')
}
}
或者provide它與你的app:
const app = createApp(App);
app.mount('#app');
app.provide('appName', 'Vue3');
然后在您想要訪問此變量的任何子組件中,inject它:
import { inject } from 'vue'
export default {
setup() {
const appName = inject('appName');
}
}

TA貢獻1836條經驗 獲得超4個贊
如果您只想用(字符串)替換{{ appName }}
任何模板'Vue 3'
,而不必導入任何東西,最干凈的方法是使用config.globalProperties,正如其他答案所建議的那樣:
const app = createApp(App).mount('#app');
app.config.globalProperties.appName = 'Vue 3'
但是,您應該盡量不要過度使用此模式。它違背了推動 Composition API 開發的可重用性和模塊化原則。
你應該避免污染的主要原因globalProperties是因為它在 Vue3 應用程序中充當污染場,所以許多插件開發者可能決定使用它來提供他們的插件實例。(顯然,沒有人會命名一個插件appName,所以在這種特殊情況下你沒有風險)。
推薦的全球化替代方法是導出函數useStuff()。
在你的情況下:
export function useAppName () { return 'Vue 3' }
// or even:
export const useAppName = () => 'Vue 3'
在任何組件中:
import { useAppName } from '@/path/to/function'
setup () {
const appName = useAppName()
return {
appName // make it available in template and hooks
}
}
優點:
它使用 Composition API 命名約定
當共享比原語更復雜的東西時(可以是一個模塊、一組函數、一個服務等),所有類型都是開箱即用的。這在
setup()
函數中特別有用。您只
stuff
在需要公開的地方公開和確定范圍,而不是在應用程序的每個組件中。另一個優點是:如果你只是在setup()
功能上需要它,你不必將它暴露給模板或鉤子。
使用隨機(但真實)插件的示例用法:
創建插件文件(即 /plugins/gsap.ts
:):
import gsap from 'gsap'
import ScrollToPlugin from 'gsap/ScrollToPlugin'
// configure the plugin globally
gsap.registerPlugin(ScrollToPlugin)
export function useGsap () {
return gsap
}
在任何組件中:
import { defineComponent } from 'vue'
import { useGsap } from '@/plugins/gsap'
export defineComponent({
setup () {
const gsap = useGsap()
// gsap here is typed correctly (if the plugin has typings)
// no need for casting
return {
gsap // optionally provide it to hooks and template
} // if needed outside setup()
}
})

TA貢獻1818條經驗 獲得超7個贊
對于想知道如何簡單地訪問thisinside的任何人setup(),一種方法是this在掛鉤中設置一個記憶變量created()并使用nextTick()它來訪問它:
const app = createApp(App);
app.config.globalProperties.$appName = 'Hello!';
<script>
import { nextTick } from 'vue';
let self;
export default {
name: 'HelloWorld',
setup() {
nextTick(() => console.log(self.$appName)); // 'Hello!'
},
created() {
self = this;
},
};
</script>
添加回答
舉報