首页  >  问答  >  正文

可组合项中的 Vue 3 模板引用

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

全部回复(1)我来回复

  • P粉658954914

    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>

    回复
    0
  • 取消回复