可组合项中的 Vue 3 模板引用
P粉153503989
P粉153503989 2023-12-22 22:57:26
0
1
529

我想从选项 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粉153503989
P粉153503989

全部回复(1)
P粉658954914

您的 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>
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板