我想从选项 API 切换到组合 API,并使用可组合项代替 mixin。到目前为止,我一直在使用具有计算属性的全局 mixin,如下所示:
// globalMixin.js computed: { myAlert() { return this.$refs.myAlertDiv; } }
然后我在创建应用程序时使用了这个mixin:
// MyApp.js const MyApp = { mixins: [globalMixin] ... }
myAlert 成为 MyApp 的计算属性,我可以使用它而无需直接在 MyApp 属性内声明。
现在我想使用可组合项实现相同的结果,假设我有一个导入可组合项的组件:
// App.vue <script setup> import { useGlobalComposable} from './globalComposable.js'; const globalComposable = useGlobalComposable(); onMounted(() => { // should work without declaring myAlert inside App.vue console.log(globalComposable.myAlert); }) ... </script>
可以吗?如果是这样,我应该如何在可组合项中声明 myAlert 模板引用?
P粉6589549142023-12-23 19:48:00
您的 useGlobalComposable
函数应返回 myAlert
,如下所示:
const useGlobalComposable = function() { const myAlertDiv = .... const myAlert = computed(() => { return myAlertDiv; }); return {myAlert} }
然后您可以在设置块中声明 myAlert
const { myAlert } = useComposable(); return { myAlert }
请注意,mixin
中的 this.$refs
不能直接与 Composition API 一起使用。如果您创建组件,则可以使用 this
访问组件属性和方法。
这是一篇关于将 refs
与 Composition API 结合使用。
在设置
中使用可组合项的非常简单的工作示例:
const { ref, reactive, createApp } = Vue;
const useComposable = function() {
const test = ref(1);
return { test };
}
const App = {
setup() {
const { test } = useComposable();
return { test }
}
}
const app = createApp(App)
app.mount('#app')
<div id="app">
<div>Test: {{ test }}</div>
</div>
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>