Heim  >  Fragen und Antworten  >  Hauptteil

Vue 3-Vorlagenreferenzen in Composables

Ich möchte von der Options-API zur Kompositions-API wechseln und Composables anstelle von Mixins verwenden. Bisher habe ich ein globales Mixin mit berechneten Eigenschaften wie diesem verwendet:

// globalMixin.js

 computed: {
    myAlert() {
        return this.$refs.myAlertDiv;
    }
 }

Dann habe ich beim Erstellen der App dieses Mixin verwendet:

// MyApp.js

const MyApp = {
   mixins: [globalMixin]
...
}

myAlert wird zu einer berechneten Eigenschaft von MyApp und ich kann es verwenden, ohne es direkt in der MyApp-Eigenschaft zu deklarieren.

Jetzt möchte ich mit Composables das gleiche Ergebnis erzielen. Nehmen wir an, ich habe eine Komponente, die Composables importiert:

// 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>

Ist es in Ordnung? Wenn ja, wie soll ich die myAlert-Vorlagenreferenz im Composable deklarieren?

P粉153503989P粉153503989301 Tage vor491

Antworte allen(1)Ich werde antworten

  • 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>

    Antwort
    0
  • StornierenAntwort