model-vue-presenter

Model-View-Presenter toolkit for Vue 3 apps
20,818 5
Install
npm install model-vue-presenter
Latest Version:1.4.7
Vue:3
License:MIT
Last Updated:Mar 10, 2026
Links: GitHub  ·  npm
Maintainer: fuzzypawzz

Model-View-Presenter toolkit for Vue 3

The toolkit enables you to easily leverage the Model-View-Presenter design pattern in Vue 3 apps.

Separate logic from the Vue components and reduce code coupling.

Documentation

For detailed documentation, including API references, tutorials, and more, please see the documentation site.

You can find the package on npm.

Installation

To begin with Model-Vue-Presenter, simply install the library:

$ npm install model-vue-presenter
# or
yarn add model-vue-presenter

Examples

Clean vue component, implementing a presenter:
<template>
  <h2>{{ viewModel.productPageHeading }}</h2>
  
  <skeleton-loader v-if="viewModel.isSkeletonLoaderShown" />
  
  <div v-else>
    <product-card v-for="product in viewModel.products" :key="product.id">
      <template #header>
        {{ product.name }}
      </template>
        
      <template #price>
        {{ product.price }}
      </template>
    </product-card>
  </div>
</template>

<script setup lang="ts">
import { useProductsPagePresenter } from './'
   
const { viewModel, presenter } = useProductsPagePresenter()
</script>
Simple presenter file:
import { reactive, computed } from "vue"
import { presenterFactory } from "model-vue-presenter"

import { useAvailableProducts, fetchAvailableProducts } from '../'

export const useProductsPagePresenter = presenterFactory(() => {
  const products = useAvailableProducts()

  const skeletonLoader = reactive({
    isShown: false,
    show() { this.isShown = true },
    hide() { this.isShown = false },
  })

  return {
    viewModel: computed(() => ({
      isSkeletonLoaderShown: skeletonLoader.isShown,
      productPageHeading: 'Available products',
      products: products.value
    })),

    onCreated() {
      skeletonLoader.show()
      fetchAvailableProducts().finally(() => {
        skeletonLoader.hide()
      })
    },
  }
})

Related Packages

vue-dotnet-webpack

Webpack build-tool provider for the VueDotNet bridge.

911 3
vue-dotnet-base

Base runtime for embedding Vue components in ASP.NET MVC apps.

799 3
vue-dotnet-vite

Vue.js bridge for embedding components in ASP.NET MVC apps.

743 3
@sum.cumo/vue-states

Component-based Vue.js state management

932 147

Version History

Version Released License
1.4.7 MIT
1.4.6 MIT
1.4.5 MIT
1.4.4 MIT
1.4.3 MIT