Vue.js: Difference between revisions

Content deleted Content added
m Reverted edits by 2A02:2378:1068:76FD:85AD:E6BC:31CB:3543 (talk) (HG) (3.4.12)
BattyBot (talk | contribs)
m Combined portal templates and other General fixes
 
(47 intermediate revisions by 35 users not shown)
Line 1:
{{short description|Open-source JavaScript library for building user interfaces}}
{{Primary sources|date=July 2019}}
{{Use mdy dates|date=August 2019}}
{{Primary sources|date=July 2019}}
{{Infobox software
| name = Vue.js
| logo = Vue.js Logo 2.svg
| logo_size = 120px
| logo_upright = yes
| author = Evan You
| developer = Evan You and the Core Team<ref>{{cite web |url=https://vuejs.org/about/team |title=Vue.js |website=vuejs.org}}</ref>
| released = {{Start date and age|2014|2}}<ref>{{cite web |url=http://blog.evanyou.me/2014/02/11/first-week-of-launching-an-oss-project/ |title=First Week of Launching Vue.js |website=Evan You |access-date=March 11, 2017 |archive-date=February 5, 2019 |archive-url=https://web.archive.org/web/20190205111451/https://blog.evanyou.me/2014/02/11/first-week-of-launching-an-oss-project/ |url-status=live }}</ref>
| latest release version = <!-- {{wikidata|property|edit|reference|Q24589705edit|P348}} -->
| latest release date = {{startStart date and age|{{wikidata|qualifier|Q24589705|P348|P577}}}}
| programming language = [[TypeScript]]
| platform = [[Web platform]]
| included with = [[Laravel]]
| size = 33.9&nbsp;KB [[Minification (programming)|min]]+[[gzip]]<ref>{{Cite web |title=@vue/runtime-dom v3.2.45 |url=https://bundlephobia.com/package/@vue/runtime-dom |access-date=2023-01-29 |website=Bundlephobia |language=en |archive-date=January 29, 2023 |archive-url=https://web.archive.org/web/20230129213124/https://bundlephobia.com/package/@vue/runtime-dom |url-status=live }}</ref>
| size = 33.9&nbsp;KB [[Minification (programming)|min]]+[[gzip]]<ref>{{cite web |title=@vue/runtime-dom v3.2.45 |url=https://bundlephobia.com/package/@vue/runtime-dom |access-date=2023-01-29 |website=Bundlephobia |language=en |archive-date=January 29, 2023 |archive-url=https://web.archive.org/web/20230129213124/https://bundlephobia.com/package/@vue/runtime-dom |url-status=live }}</ref>
| genre = [[JavaScript library]]
| license = [[MIT License]]<ref name="license">{{cite web |title=vue/LICENSE |url=https://github.com/vuejs/core/blob/dev/LICENSE |via=GitHub |work=Vue.js |access-date=April 17, 2017}}</ref>
}}
'''Vue.js''' (commonly referred to as '''Vue'''; pronounced "view"<ref name="introduction">{{cite web |title=Introduction |url=https://vuejs.org/guide/introduction.html |website=Vuejs.org |access-date=January 3, 2020 |language=en |archive-date=February 10, 2022 |archive-url=https://web.archive.org/web/20220210104313/https://vuejs.org/guide/introduction.html |url-status=live}}</ref>) is an open-source [[model–view–viewmodel]] front end [[JavaScript framework]] for building [[user interface]]s and [[single-page application]]s.{{refn|<ref>{{cite book |last1=Macrae |first1=Callum |title=Vue.js: Up and Running: Building Accessible and Performant Web Apps |date=2018 |publisher=[[O'Reilly Media]] |isbn=978-1-4919-9721-5 |url=https://books.google.com/books?id=bJpNDwAAQBAJ |language=en |access-date=August 9, 2019 |archive-date=May 30, 2024 |archive-url=https://web.archive.org/web/20240530045409/https://books.google.com/books?id=bJpNDwAAQBAJ |url-status=live}}</ref><ref>{{cite book |last1=Nelson |first1=Brett |title=Getting to Know Vue.js: Learn to Build Single Page Applications in Vue from Scratch |year=2018 |publisher=[[Apress]] |isbn=978-1-4842-3781-6 |url=https://books.google.com/books?id=mTpsDwAAQBAJ |language=en |access-date=August 9, 2019 |archive-date=May 30, 2024 |archive-url=https://web.archive.org/web/20240530045418/https://books.google.com/books?id=mTpsDwAAQBAJ |url-status=live}}</ref><ref>{{cite book |last1=Yerburgh |first1=Edd |title=Testing Vue.js Applications |date=2019 |publisher=[[Manning Publications]] |isbn=978-1-61729-524-9 |url=https://books.google.com/books?id=7-FAtAEACAAJ |language=en |access-date=August 9, 2019 |archive-date=May 30, 2024 |archive-url=https://web.archive.org/web/20240530045404/https://books.google.com/books?id=7-FAtAEACAAJ |url-status=live}}</ref><ref>{{cite book |last1=Freeman |first1=Adam |title=Pro Vue.js 2 |year=2018 |publisher=[[Apress]] |isbn=978-1-4842-3805-9 |url=https://books.google.com/books?id=HQFuDwAAQBAJ |language=en |access-date=August 9, 2019 |archive-date=May 30, 2024 |archive-url=https://web.archive.org/web/20240530045404/https://books.google.com/books?id=HQFuDwAAQBAJ |url-status=live}}</ref><ref>{{cite book |last1=Franklin |first1=Jack |last2=Wanyoike |first2=Michael |last3=Bouchefra |first3=Ahmed |last4=Silas |first4=Kingsley |last5=Campbell |first5=Chad A. |last6=Jacques |first6=Nilson |last7=Omole |first7=Olayinka |last8=Mulders |first8=Michiel |title=Working with Vue.js |year=2019 |publisher=[[SitePoint]] |isbn=978-1-4920-7144-0 |url=https://books.google.com/books?id=OKScDwAAQBAJ |language=en}}{{Dead link |date=May 2024 |bot=InternetArchiveBot |fix-attempted=yes}}</ref><ref name="introduction" />}} It was created by Evan You and is maintained by him and the rest of the active core team members.<ref>{{cite web |url=https://vuejs.org/about/team.html |title=Meet the Team |website=Vuejs.org |access-date=September 23, 2019 |language=en |archive-date=February 7, 2022 |archive-url=https://web.archive.org/web/20220207050948/https://vuejs.org/about/team.html |url-status=live}}</ref>
 
'''Vue.js''' (commonly referred to as '''Vue'''; pronounced "view"<ref name="introduction">{{cite web |title=Introduction |url=https://vuejs.org/guide/introduction.html |website=Vuejs.org |access-date=January 3, 2020 |language=en |archive-date=February 10, 2022 |archive-url=https://web.archive.org/web/20220210104313/https://vuejs.org/guide/introduction.html |url-status=live }}</ref>) is an open-source [[model–view–viewmodel]] front end [[JavaScript library]] for building [[user interface]]s and [[single-page application]]s.{{refn|<ref>{{cite book |last1=Macrae |first1=Callum |title=Vue.js: Up and Running: Building Accessible and Performant Web Apps |date=2018 |publisher=[[O'Reilly Media]] |isbn=978-1-4919-9721-5 |url=https://books.google.com/books?id=bJpNDwAAQBAJ |language=en |access-date=August 9, 2019 |archive-date=May 30, 2024 |archive-url=https://web.archive.org/web/20240530045409/https://books.google.com/books?id=bJpNDwAAQBAJ |url-status=live }}</ref><ref>{{cite book |last1=Nelson |first1=Brett |title=Getting to Know Vue.js: Learn to Build Single Page Applications in Vue from Scratch |year=2018 |publisher=[[Apress]] |isbn=978-1-4842-3781-6 |url=https://books.google.com/books?id=mTpsDwAAQBAJ |language=en |access-date=August 9, 2019 |archive-date=May 30, 2024 |archive-url=https://web.archive.org/web/20240530045418/https://books.google.com/books?id=mTpsDwAAQBAJ |url-status=live }}</ref><ref>{{cite book |last1=Yerburgh |first1=Edd |title=Testing Vue.js Applications |date=2019 |publisher=[[Manning Publications]] |isbn=978-1-61729-524-9 |url=https://books.google.com/books?id=7-FAtAEACAAJ |language=en |access-date=August 9, 2019 |archive-date=May 30, 2024 |archive-url=https://web.archive.org/web/20240530045404/https://books.google.com/books?id=7-FAtAEACAAJ |url-status=live }}</ref><ref>{{cite book |last1=Freeman |first1=Adam |title=Pro Vue.js 2 |year=2018 |publisher=[[Apress]] |isbn=978-1-4842-3805-9 |url=https://books.google.com/books?id=HQFuDwAAQBAJ |language=en |access-date=August 9, 2019 |archive-date=May 30, 2024 |archive-url=https://web.archive.org/web/20240530045404/https://books.google.com/books?id=HQFuDwAAQBAJ |url-status=live }}</ref><ref>{{cite book |last1=Franklin |first1=Jack |last2=Wanyoike |first2=Michael |last3=Bouchefra |first3=Ahmed |last4=Silas |first4=Kingsley |last5=Campbell |first5=Chad A. |last6=Jacques |first6=Nilson |last7=Omole |first7=Olayinka |last8=Mulders |first8=Michiel |title=Working with Vue.js |year=2019 |publisher=[[SitePoint]] |isbn=978-1-4920-7144-0 |url=https://books.google.com/books?id=OKScDwAAQBAJ |language=en }}{{Dead link|date=May 2024 |bot=InternetArchiveBot |fix-attempted=yes }}</ref><ref name="introduction" />}} It was created by Evan You, and is maintained by him and the rest of the active core team members.<ref>{{cite web |url=https://vuejs.org/about/team.html |title=Meet the Team |website=Vuejs.org |access-date=September 23, 2019 |language=en |archive-date=February 7, 2022 |archive-url=https://web.archive.org/web/20220207050948/https://vuejs.org/about/team.html |url-status=live }}</ref>
 
== Overview ==
Line 24 ⟶ 27:
 
== History ==
Vue was created by Evan You after working for [[Google]] using [[AngularJS]] in several projects. He later summed up his thought process: "I figured, what if I could just extract the part that I really liked about Angular and build something really lightweight."<ref>{{cite news |url=https://betweenthewires.org/2016/11/03/evan-you/ |archive-url=https://web.archive.org/web/20170603052649/https://betweenthewires.org/2016/11/03/evan-you/ |url-status=dead |archive-date=June 3, 2017 |title=Evan You |date=November 3, 2016 |work=Between the Wires |access-date=August 26, 2017 |language=en}}</ref> The first source code commit to the project was dated July 2013, andat which time it was originally named "Seed".<ref name=":2">{{Cite book |last1=贾 |first1=志杰 |title=剑指大前端全栈工程师 |last2=史 |first2=广 |last3=赵 |first3=东 |year=2023 |isbn=9787302617594 |language=zh-CN |trans-title=Aspiring Frontend: Full-Stack Engineer}}</ref> Vue was first publicly announced the following February, in 2014.<ref name=":0">{{Cite web |date=2014-02-03 |title=Vue.js: JavaScript MVVM made simple |url=https://news.ycombinator.com/item?id=7169288 |access-date=2023-01-29 |website=Hacker News |archive-date=January 29, 2023 |archive-url=https://web.archive.org/web/20230129215705/https://news.ycombinator.com/item?id=7169288 |url-status=live }}</ref><ref name=":1">{{Cite web |date=2014-02-11 |title=First Week of Launching Vue.js |url=http://blog.evanyou.me/2014/02/11/first-week-of-launching-an-oss-project/index.html |access-date=2023-01-29 |website=Evan You |archive-date=April 12, 2017 |archive-url=https://web.archive.org/web/20170412110312/http://blog.evanyou.me/2014/02/11/first-week-of-launching-an-oss-project/index.html |url-status=live }}</ref>
 
Version names are often derived from [[manga]] and [[anime]] series, with the first letters arranged in alphabetical order.
 
=== Versions ===
Line 32 ⟶ 35:
|-
! Version !! Release date !! Title !! End of LTS !! End of Life
|-
|3.5
|{{dts|2024-09-01}}
|[[Tengen Toppa Gurren Lagann]]<ref>{{cite web |date=September 1, 2024 |title=Announcing Vue 3.5 |url=https://blog.vuejs.org/posts/vue-3-5 |url-status=live |archive-url=https://web.archive.org/web/20240903133340/https://blog.vuejs.org/posts/vue-3-5 |archive-date=September 3, 2024 |access-date=October 25, 2024 |work=Vue.js}}</ref>
|
|
|-
|3.4
Line 59 ⟶ 68:
| 2.2 || {{dts|2017-02-26}} || [[Initial D]]<ref>{{cite web |url=https://github.com/vuejs/vue/releases/tag/v2.2.0 |title=v2.2.0 Initial D |date=February 26, 2017 |via=GitHub |work=Vue.js |access-date=September 23, 2020 |language=en |archive-date=April 13, 2021 |archive-url=https://web.archive.org/web/20210413135052/https://github.com/vuejs/vue/releases/tag/v2.2.0 |url-status=live }}</ref> || ||
|-
| 2.1 || {{dts|2016-11-22}} || [[Hunter X× Hunter]]<ref>{{cite web |url=https://github.com/vuejs/vue/releases/tag/v2.1.0 |title=v2.1.0 Hunter X Hunter |date=November 22, 2016 |via=GitHub |work=Vue.js |access-date=September 23, 2020 |language=en |archive-date=November 8, 2020 |archive-url=https://web.archive.org/web/20201108094602/https://github.com/vuejs/vue/releases/tag/v2.1.0 |url-status=live }}</ref> || ||
|-
| 2.0 || {{dts|2016-09-30}} || [[Ghost in the Shell]]<ref>{{cite web |url=https://github.com/vuejs/vue/releases/tag/v2.0.0 |title=v2.0.0 Ghost in the Shell |date=September 30, 2016 |via=GitHub |work=Vue.js |access-date=September 23, 2020 |language=en |archive-date=October 27, 2020 |archive-url=https://web.archive.org/web/20201027193218/https://github.com/vuejs/vue/releases/tag/v2.0.0 |url-status=live }}</ref> || ||
Line 80 ⟶ 89:
|}
 
When a new major is released iei.e. v3.y.z, the last minor iei.e. 2.x.y will become a LTS release for 18 months (bug fixes and security patches) and for the following 18 months will be in maintenance mode (security patches only).<ref>{{cite web |url=https://github.com/vuejs/roadmap |title=Vue Roadmap |via=GitHub |work=Vue.js |date=November 6, 2022 |language=en |access-date=December 10, 2021 |archive-date=December 10, 2021 |archive-url=https://web.archive.org/web/20211210095019/https://github.com/vuejs/roadmap |url-status=live }}</ref>
 
=== State management evolution ===
* '''2015''' - Vuex introduced as official state management solution
* '''2021''' - Pinia development begins as Vuex 5 experiment
* '''2022''' - Pinia becomes officially recommended for new projects
* '''2023''' - Vue team announces Vuex maintenance mode transition
 
== Features ==
Line 87 ⟶ 102:
Vue components extend basic [[HTML element]]s to encapsulate reusable code. At a high level, components are custom elements to which the Vue's compiler attaches behavior. In Vue, a component is essentially a Vue instance with pre-defined options.<ref>{{cite web |url=https://vuejs.org/guide/essentials/component-basics.html |title=Components |website=Vuejs.org |access-date=March 11, 2017 |language=en |archive-date=February 10, 2022 |archive-url=https://web.archive.org/web/20220210121233/https://vuejs.org/guide/essentials/component-basics.html |url-status=live }}</ref>
The code snippet below contains an example of a Vue component. The component presents a button and prints the number of times the button is clicked:
{{<syntaxhighlight| lang=html|code="vue">
<!doctype html>
<template>
<html>
<div id="tuto">
<head>
<button-clicked v-bind:initial-count="0"></button-clicked>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</div>
</templatehead>
 
<body>
<script>
<div id="app">
Vue.component('button-clicked', {
<button-clicked :initial-count="0" />
props: ['initialCount'],
data: () =</div> ({
count: 0,
}),
template: '<button v-on:click="onClick">Clicked <nowiki>{{ count }}</nowiki> times</button>',
computed: {
countTimesTwo() {
return this.count * 2;
}
},
watch: {
count(newValue, oldValue) {
console.log(`The value of count is changed from ${oldValue} to ${newValue}.`);
}
},
methods: {
onClick() {
this.count += 1;
}
},
mounted() {
this.count = this.initialCount;
}
});
 
<script>
new Vue({
const {
el: '#tuto',
defineComponent,
});
ref,
</script>
computed,
}}
watch,
watchEffect,
onMounted,
createApp
} = Vue
 
const ButtonClicked = defineComponent({
name: 'ButtonClicked',
props: {
initialCount: {
type: Number,
required: true
}
},
setup(props) {
const count = ref(0)
 
const doubleCount = computed(() => count.value * 2)
 
const handleClick = () => {
count.value += 1
}
 
watch(count, (newValue, oldValue) => {
console.log(`The value of count is changed from ${oldValue} to ${newValue}.`)
})
 
watchEffect(() => console.log(`Double the value of count is ${doubleCount.value}`))
 
onMounted(() => {
count.value = props.initialCount
})
 
return {
count,
doubleCount,
handleClick
}
},
template: `
<button @click="handleClick">Clicked <nowiki>{{ count }}</nowiki> times</button>
`
})
 
const app = createApp({})
 
app.component('ButtonClicked', ButtonClicked)
 
app.mount('#app')
</script>
</body>
</html>
</syntaxhighlight>
 
=== Templates ===
Vue uses an [[HTML]]-based template syntax that allows binding the rendered [[Document Object Model|DOM]] to the underlying Vue instance's data. All Vue templates are valid HTML that can be parsed by specification-compliant browsers and HTML [[Parsing|parsers]]. Vue compiles the templates into [[virtual DOM]] render functions. A virtual Document Object Model (or "DOM") allows Vue to render components in its memory before updating the browser. Combined with the reactivity system, Vue can calculate the minimal number of components to re-render and apply the minimal amount of DOM manipulations when the app state changes.
<ref>{{cite news |last1=Jordan |first1=John |title=Vue Admin Template |url=https://themeselection.com/item/category/vuejs-admin-templates/ |access-date=16 July 2022}}</ref>
 
Vue users can use template syntax or choose to directly write render functions using hyperscript either through function calls or [[ReactJSX (JavaScript library)#JSX|JSX]].<ref>{{cite web |url=https://vuejs.org/guide/essentials/template-syntax.html |title=Template Syntax |website=Vuejs.org |access-date=March 11, 2017 |language=en |archive-date=February 10, 2022 |archive-url=https://web.archive.org/web/20220210105315/https://vuejs.org/guide/essentials/template-syntax.html |url-status=live }}</ref> Render functions allow applications to be built from [[software components]].<ref>{{cite web |url=https://medium.com/the-vue-point/vue-2-0-is-here-ef1f26acf4b8#77d9 |title=Vue 2.0 is Here! |date=September 30, 2016 |website=The Vue Point |access-date=March 11, 2017 |archive-date=March 12, 2017 |archive-url=https://web.archive.org/web/20170312072632/https://medium.com/the-vue-point/vue-2-0-is-here-ef1f26acf4b8#77d9 |url-status=live }}</ref>
 
=== Reactivity ===
Line 148 ⟶ 194:
 
=== Routing ===
A traditional disadvantage of [[single-page application]]s (SPAs) is the inability to share links to the exact "sub" page within a specific web page. Because SPAs serve their users only one URL-based response from the server (it typically serves index.html or index.vue), bookmarking certain screens or sharing links to specific sections is normally difficult if not impossible. To solve this problem, many client-side routers delimit their dynamic URLs with a "[[Shebang_Shebang (Unix)|hashbang]]" (#!), e.g. ''page.com/#!/''. However, with HTML5 most modern browsers support routing without hashbangs.
 
Vue provides an interface to change what is displayed on the page based on the current URL path – regardless of how it was changed (whether by emailed link, refresh, or in-page links). Additionally, using a front-end router allows for the intentional transition of the browser path when certain browser events (i.e. clicks) occur on buttons or links. Vue itself doesn't come with front-end hashed routing. But the open-source "vue-router" package provides an API to update the application's URL, supports the back button (navigating history), and email password resets or email verification links with authentication URL parameters. It supports mapping nested routes to nested components and offers fine-grained transition control. With Vue, developers are already composing applications with small building blocks building larger components. With vue-router added to the mix, components must merely be mapped to the routes they belong to, and parent/root routes must indicate where children should render.<ref>{{cite web |url=https://vuejs.org/guide/scaling-up/routing.html |title=Routing |website=Vuejs.org |access-date=March 11, 2017 |language=en |archive-date=February 10, 2022 |archive-url=https://web.archive.org/web/20220210105119/https://vuejs.org/guide/scaling-up/routing.html |url-status=live }}</ref>
 
{{syntaxhighlight|lang=htmlvue|code=
<div id="app">
<router-view></router-view>
Line 196 ⟶ 242:
 
=== Official libraries ===
* '''Vue Router''' – The official router, suitable for building [[Single-page application|SPAs]]<ref name=":2" />
* '''VuexPinia''' – Flux-inspiredThe centralizedofficial state management solution
 
* '''Vue Server Renderer''' – Server-Side Rendering
=== Video courses ===
* '''Pinia''' – New simple state management
 
* '''Vue School''' – Expert-led courses on Vue.js and its ecosystem.<ref>{{Cite web |title=Vue School {{!}} The #1 source for learning Vue.js from experts |url=https://vueschool.io/ |access-date=2024-12-24 |website=Vue School |language=en}}</ref>
 
=== State management libraries ===
*'''Pinia''' – Official state management solution with modular architecture
*'''Vuex''' – Legacy state management library, now in maintenance mode
*'''VueUse''' – Collection of 200+ composition utilities including state management helpers
 
== Comparison with other frameworks ==
JavaScript-based web application frameworks, such as Vue, provide extensive capabilities but come with associated trade-offs. These frameworks often extend or enhance features available through native web technologies, such as routing, component-based development, and state management. While native web standards, including Web Components, modern JavaScript APIs like Fetch and ES Modules, and browser capabilities like Shadow DOM, have advanced significantly, frameworks remain widely used for their ability to enhance developer productivity, offer structured patterns for large-scale applications, simplify handling edge cases, and provide tools for performance optimization.<ref name=":02">{{Cite book |title=JavaScript Frameworks for Modern Web Development: The Essential Frameworks, Libraries, and Tools to Learn Right Now |isbn=978-1484249949}}</ref><ref name=":12">{{Cite book |title=Building Native Web Components: Front-End Development with Polymer and Vue.js |isbn=978-1484259047}}</ref><ref name=":22">{{Cite book |title=Hands-On JavaScript High Performance: Build faster web apps using Node.js, Svelte.js, and WebAssembly |isbn=978-1838821098}}</ref>
 
Frameworks can introduce abstraction layers that may contribute to performance overhead, larger bundle sizes, and increased complexity. Modern frameworks, such as Vue 3, address these challenges with features like concurrent rendering, tree-shaking, and selective hydration. While these advancements improve rendering efficiency and resource management, their benefits depend on the specific application and implementation context. Lightweight frameworks, such as Svelte and Preact, take different architectural approaches, with Svelte eliminating the virtual DOM entirely in favor of compiling components to efficient JavaScript code, and Preact offering a minimal, compatible alternative to React. Framework choice depends on an application’s requirements, including the team’s expertise, performance goals, and development priorities.<ref name=":02" /><ref name=":12" /><ref name=":22" />
 
A newer category of web frameworks, including enhance.dev, Astro, and Fresh, leverages native web standards while minimizing abstractions and development tooling.<ref>{{Cite web |title=Enhance |website=[[GitHub]] |url=https://github.com/enhance-dev }}</ref><ref>{{Cite web |title=Astro framework |website=[[GitHub]] |url=https://github.com/withastro/astro }}</ref><ref>{{Cite web |title=Fresh |website=[[GitHub]] |url=https://github.com/denoland/fresh }}</ref> These solutions emphasize [[progressive enhancement]], [[server-side rendering]], and optimizing performance. Astro renders static HTML by default while hydrating only interactive parts. Fresh focuses on server-side rendering with zero runtime overhead. Enhance.dev prioritizes progressive enhancement patterns using Web Components. While these tools reduce reliance on client-side JavaScript by shifting logic to build-time or server-side execution, they still use JavaScript where necessary for interactivity. This approach makes them particularly suitable for performance-critical and content-focused applications.<ref name=":02" /><ref name=":12" /><ref name=":22" />
 
== See also ==
{{portalPortal|Free and open-source software}}
* [[Comparison of JavaScript-based web frameworks]]
* [[Svelte]]
* [[React (software)|React]]
* [[AngularJS]]
* [[Angular (web framework)|Angular]]
* [[Quasar framework|Quasar Framework]]
* [[Web framework]]
* [[JavaScript library]]
* [[Model–view–viewmodel|Model–view–ViewModel]]
* [[Nuxt.js]]
 
== Sources ==