{"id":3663,"date":"2021-12-22T10:06:30","date_gmt":"2021-12-22T10:06:30","guid":{"rendered":"http:\/\/the-codest.localhost\/blog\/the-comparison-of-the-champions-angular-vs-vue\/"},"modified":"2024-06-19T08:42:15","modified_gmt":"2024-06-19T08:42:15","slug":"srovnani-sampionu-angular-vs-vue","status":"publish","type":"post","link":"https:\/\/thecodest.co\/cs\/blog\/the-comparison-of-the-champions-angular-vs-vue\/","title":{"rendered":"Srovn\u00e1n\u00ed \u0161ampion\u016f: Angular vs Vue"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Setting up a project<\/h2>\n\n\n\n<p>The fastest way to kick off a <a href=\"https:\/\/thecodest.co\/cs\/dictionary\/why-do-projects-fail\/\">project<\/a> is by using the <b>CLI provided by the frameworks\u2019 authors<\/b>. Both come with pretty good service; however, there are few differences i.e., <strong><a href=\"https:\/\/thecodest.co\/cs\/blog\/hire-vue-js-developers\/\">Vue<\/a><\/strong> comes with more options, therefore, you can tailor a project to your needs from the start right. You can choose the <strong>Vue version<\/strong>, whether you need to use routing. <a href=\"https:\/\/thecodest.co\/cs\/dictionary\/typescript-developer\/\">Typescript<\/a>, CSS preprocessors or set up a linter right ahead. Also, it lets you decide if you want to set up tests (unit or E2E).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/zrzut-ekranu-2021-12-22-o-09.45.15.png\" alt=\"Vue CLI \" title=\"Vue CLI example \"\/><\/figure>\n\n\n\n<p><strong><a href=\"https:\/\/thecodest.co\/cs\/dictionary\/what-is-node-js-used-for-in-angular\/\">Angular<\/a><\/strong> comes with a generator which allows you to create components, services, interfaces and directives right from the console, which from my experience is very handy as there is no need to manually set up folders, files and redundant <a href=\"https:\/\/thecodest.co\/cs\/dictionary\/what-is-code-refactoring\/\">code<\/a> by hand, especially when you use i.e., MVC pattern. Typescript comes out of the box with <strong>Angular<\/strong> and kind of pressures you to use it. If you haven\u2019t done it yet, here is a handy introduction why you should try it out &#8211; you can check it out <a href=\"https:\/\/thecodest.co\/blog\/why-you-should-probably-use-typescript\/\">here<\/a>.<\/p>\n\n\n\n<p>At the start, <strong>Angular\u2019s CLI <\/strong> asks you only about routing or preferred CSS preprocessors which, in comparison to <strong>Vue<\/strong>, doesn\u2019t leave you much space to decide about the structure and style of your application. But if you are going to follow the convention it asks you to use, the CLI is going to lead you all the way.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/zrzut-ekranu-2021-12-22-o-09.53.51.png\" alt=\"Angular CLI \" title=\"Angular CLI  example \"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Project structure<\/h2>\n\n\n\n<p><strong>Vue<\/strong> uses SFC (Single File Components) which makes it quite simple for a new developer to start using a framework and find their feet in the code.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Directives<\/h3>\n\n\n\n<p><strong>Vue<\/strong> also comes out of the box with directives such as `v-if, v-for`, which is very intuitive to use as it is almost a copy of the <strong>Angular<\/strong> ones. <strong>Vue<\/strong> uses the same convention for two-way <a href=\"https:\/\/thecodest.co\/cs\/blog\/app-data-collection-security-risks-value-and-types-explored\/\">data<\/a> binding (just by prefixing it with, i.e., v- in `v-model`) and adding the @\/v-on indicating that we are reacting to something. <strong>Angular<\/strong> separates this by indicating which way we are going by using parentheses for event binding and square brackets for property binding, i.e. ,`(change), [ngStyle], [(ngModel)]`.<\/p>\n\n\n\n<p>In <strong>Vue<\/strong>, the structure itself is simple, there is no need to make separate files for stylesheets and logic, so it\u2019s all organized and approachable. Of course, <strong>Vue<\/strong> comes with a style guide where you can find recommended rules to follow when creating a project; however, there are only a few that are mandatory.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Events<\/h3>\n\n\n\n<p>I this case, <strong>Vue<\/strong> comes again with a more handy solution; namely, to emit an event from the child component to its parent all you need to do is (using <strong>Vue 3 Composition <a href=\"https:\/\/thecodest.co\/cs\/blog\/compare-staff-augmentation-firms-that-excel-in-api-team-staffing-for-financial-technology-projects\/\">API<\/a> <\/strong>) take a method from the context object in the setup and simply emit whatever you need at the moment:<\/p>\n\n\n\n<p><code>setup(props, { emit }) { const componentMethodYouWantToUseSomewhere = () => { emit(\u2018customNameOfYourEvent\u2019, dataYouWantToPass); } }<\/code><\/p>\n\n\n\n<p>You can also do it directly in the template as a response to some other event.<\/p>\n\n\n\n<p>In <strong>Angular<\/strong>, you need to first define an EventEmitter as follows:<\/p>\n\n\n\n<p><code>@Output() customNameForYourEmitter = new EventEmitter&lt;Data&gt;();<\/code><\/p>\n\n\n\n<p>Then you need to call an emit method on the EventEmitter:<\/p>\n\n\n\n<p><code>this.customNameForYourEmitter.emit(this.theDataYouWantToPass);<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Slots\/content projection<\/h3>\n\n\n\n<p>In both frameworks, you can easily move the content (single as well as multiple) from the parent component to its child just by adding additional html inside the child tags, with slight differences:<\/p>\n\n\n\n<p>Vue:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">`&lt;slot name=\"header\">&lt;\/slot>`<span style=\"background-color: initial; font-family: inherit; font-size: inherit;\"> <\/span><\/code><\/pre>\n\n\n\n<p>Angular:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">Default:\n    &lt;ng-content&gt;&lt;\/ng-content&gt;\n\nNamed slot:\n    &lt;ng-content select=\"[yourName]\"&gt;&lt;\/ng-content&gt;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">&lt;p yourName&gt;\n   This is a named slot\n  &lt;\/p&gt;\n  &lt;p&gt;This is a default slot&lt;\/p&gt;<\/code><\/pre>\n\n\n\n<p>However, if you want to conditionally render some parts of your application, <strong>Vue<\/strong> is more intuitive than <strong>Angular<\/strong> and lets you do it faster by adding the <code>v-if<\/code> directive to your <code>&lt;template><\/code> tag, which allows you to render only the parts that are currently needed.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">&lt;template v-if=\"someConditionToBeMet\u201d&gt;\n  &lt;!-- render this part if condition is met --&gt;\n&lt;\/template&gt;\n&lt;template v-else&gt;\n  &lt;!-- render this if first condition isn\u2019t met --&gt;\n&lt;\/template&gt;<\/code><\/pre>\n\n\n\n<p>While the <code>ng-content<\/code> is always rendered, you need to use in this case the <code>ng-template<\/code>, and later create your own custom directive:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">&lt;div *ngIf=\"conditionToBeMet\" [id]=\"contentId\"&gt;\n    &lt;ng-container [ngTemplateOutlet]=\"content.templateRef\"&gt;&lt;\/ng-container&gt;\n&lt;\/div&gt;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">@Directive({\n  selector: '[customDirectiveName]'\n})\nexport class CustomDirective {\n  constructor(public templateRef: TemplateRef&lt;unknown&gt;) {}\n}<\/code><\/pre>\n\n\n\n<p>and because of the name you give to your <code>ng-template<\/code> attribute, Angular will know what should be rendered:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">&lt;ng-template customDirectiveName&gt;\n  &lt;!-- content goes here --&gt;\n&lt;\/ng-template&gt;<\/code><\/pre>\n\n\n\n<p>Also, within the component, you want to project your template to be used in the <code>@ContentChild<\/code> to get the proper template:<\/p>\n\n\n\n<p><code>@ContentChild(CustomDirective) content!: CustomDirective;<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Service vs store<\/h3>\n\n\n\n<p><strong>Angular<\/strong> at its core encourages you to use the MVC design pattern where you can use services for the model. Because of that, you need to learn the dependency injection pattern to freely operate data in your application. It lets you separate side effects of your, i.e., API calls and use the same logic across the whole project by injecting the parts you need at the moment, which also makes it a modular approach.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/thecodest.co\/services\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/blog.webp\" alt=\"\"\/><\/a><\/figure>\n\n\n\n<p><strong>Angular<\/strong> also comes with the Ngrx\/store framework based on the Redux pattern in case you want to use a more reactive approach with RxJs observables. It comes with Actions that are used for dispatching unique events from components and\/or services, Effects that handle side effects or async actions you want to perform and Reducers that mutate your state.<\/p>\n\n\n\n<p>In <strong>Vue<\/strong>, the popular approach is to use the Vuex library for state management which also comes with tools like Actions, Mutations and Getters, just like Ngrx\/store, to help you manage and organize the state of your application. You can modularize it by setting different stores for your views, i.e., a user store or a cart store, but it can lead to name-spacing problems, unless you use the <code>namespaced: true<\/code> property in your store declaration.<\/p>\n\n\n\n<p>Here is a comparison of services-based approach and the Vuex one when the task is to fetch some <a href=\"https:\/\/thecodest.co\/cs\/dictionary\/how-to-make-product\/\">product<\/a> data for your shop:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">@Injectable() \/\/ decorator to indicate we want to use it in DI later on\nexport class ProductsService {\n  private products: Product[] = [];\n\n  constructor(private backend: BackendService) { }\n\n  getProducts() {\n    this.backend.getAll(Product).then( (products: Product[]) =&gt; {\n      \/\/do whatever you like with your products\n    });\n    return this.products;\n  }\n}<\/code><\/pre>\n\n\n\n<p>Then, in the component, we inject our service to be used:<br><code>constructor(private service: HeroService) { }<\/code><\/p>\n\n\n\n<p>In <strong>Vue<\/strong>, we simple dispatch an action that makes a backend call for <a href=\"https:\/\/thecodest.co\/cs\/blog\/why-us-companies-are-opting-for-polish-developers\/\">us<\/a>:<\/p>\n\n\n\n<p><code>store.dispatch(getAllProducts)<\/code><\/p>\n\n\n\n<p>and in the <code>actions.ts<\/code> file we define an action:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">actions: {\ngetAllProducts ({ commit }){\n    commit(\u2018setProducts\u2019, await getProducts();); \/\/ fetch data and put the results in the store\n}}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Fetching data<\/h2>\n\n\n\n<p>With <strong>Vue<\/strong>, you can use Axios\/Fetch or whatever library you want to use, it is really straightforward \u2013 you just handle asynchronous calls with promises or whatever approach suits you best.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">try {\nhttp.get(\u2018https:\/\/url.to.get.data\u2019)\n    .then(res =&gt; res.json())\n    .then(data =&gt; console.log(\u2018do whatever is needed\u2019))\n} catch (e) {\n    \/\/handle error\n}<\/code><\/pre>\n\n\n\n<p><strong>Angular<\/strong> comes with the HttpClient library that uses observables leading you to another perk \u2013 to use it properly and\/or manipulate data, you need to learn RxJs. Again, it can be quite overwhelming to get fluent and feel familiar with this abstract construct at the very beginning.<\/p>\n\n\n\n<p>You can use Axios if that\u2019s what you want to do but as the Axios GitHub page says: \u2018Axios is heavily inspired by the $http service provided in <strong>Angular<\/strong>\u2019<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">private getAllItems(): void {\nthis.http\n.get&lt;Item&gt;(\u2018https:\/\/url.to.fetch.data\u2019)\n\n.pipe(\npluck(\u2018results\u2019),\ntap(console.log(\u2018do whatever side effect you want to use here\u2019)\ncatchError((error) =&gt; {\n        \/\/handle error\n})\n)\n.subscribe((result: ResultType[])\n    \/\/final operation on given output\n)\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Summing up<\/h2>\n\n\n\n<p>| Vue | Angular |<br>| &#8212;&#8212;&#8212;&#8211; | &#8212;&#8212;&#8212;&#8211; |<br>| Does not push you to follow very strict rules | Requires using Typescript, class-based components\/services |<br>| Flat learning curve, easy to start with | High learning curve (Typescript, RxJs, Dependency Injection) |<br>| A lot of things to configure during project setup| Not much to set up front but it lets you generate project structure through console |<br>| Community-driven framework based on both Angular and <a href=\"https:\/\/thecodest.co\/cs\/blog\/react-development-all-you-have-to-know\/\">React<\/a> | Created and maintained by Google |<br>| Not much is included, need to install external libraries| State management, HttpClient included in the framework |<\/p>\n\n\n\n<p><b>Read more:<\/b><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/javascript-is-totally-dead-some-dude-on-the-internet\/\">JavaScript Is Totally Dead. Some Dude on the Internet<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/deploy-graphql-mongodb-api-using-netlify-functions\/\">Deploy GraphQL\/MongoDB API Using Netlify Functions<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/thecodest.co\/blog\/how-not-to-kill-a-project-with-bad-coding-practices\/\">How to Kill a Project with Bad Coding Practises<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>V sou\u010dasn\u00e9 dob\u011b existuje n\u011bkolik b\u011b\u017en\u011b pou\u017e\u00edvan\u00fdch frontendov\u00fdch framework\u016f, kter\u00e9 jejich tv\u016frci neust\u00e1le vyv\u00edjej\u00ed, p\u0159i\u010dem\u017e ka\u017ed\u00fd z nich se m\u00edrn\u011b li\u0161\u00ed od toho druh\u00e9ho. A p\u0159esto mohou m\u00edt n\u011bco spole\u010dn\u00e9ho. Zde je srovn\u00e1n\u00ed na z\u00e1klad\u011b procesu v\u00fdvoje - Angular spole\u010dnosti Google vs. open-source Vue.js:<\/p>","protected":false},"author":2,"featured_media":3664,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-3663","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-development"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>The Comparison of The Champions: Angular vs Vue - The Codest<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thecodest.co\/cs\/blog\/srovnani-sampionu-angular-vs-vue\/\" \/>\n<meta property=\"og:locale\" content=\"cs_CZ\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Comparison of The Champions: Angular vs Vue\" \/>\n<meta property=\"og:description\" content=\"Currently, there are a few frontend frameworks used commonly and constantly developed by its creators, each slightly different than the other. And yet, they may have something in common. Here is a comparison based on the development process \u2013 Google\u2019s Angular vs. open-source Vue.js:\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thecodest.co\/cs\/blog\/srovnani-sampionu-angular-vs-vue\/\" \/>\n<meta property=\"og:site_name\" content=\"The Codest\" \/>\n<meta property=\"article:published_time\" content=\"2021-12-22T10:06:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-19T08:42:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/angular-vs-vue.png\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"540\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"thecodest\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"thecodest\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-comparison-of-the-champions-angular-vs-vue\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-comparison-of-the-champions-angular-vs-vue\\\/\"},\"author\":{\"name\":\"thecodest\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\"},\"headline\":\"The Comparison of The Champions: Angular vs Vue\",\"datePublished\":\"2021-12-22T10:06:30+00:00\",\"dateModified\":\"2024-06-19T08:42:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-comparison-of-the-champions-angular-vs-vue\\\/\"},\"wordCount\":1145,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-comparison-of-the-champions-angular-vs-vue\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/angular-vs-vue.png\",\"articleSection\":[\"Software Development\"],\"inLanguage\":\"cs-CZ\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-comparison-of-the-champions-angular-vs-vue\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-comparison-of-the-champions-angular-vs-vue\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-comparison-of-the-champions-angular-vs-vue\\\/\",\"name\":\"The Comparison of The Champions: Angular vs Vue - The Codest\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-comparison-of-the-champions-angular-vs-vue\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-comparison-of-the-champions-angular-vs-vue\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/angular-vs-vue.png\",\"datePublished\":\"2021-12-22T10:06:30+00:00\",\"dateModified\":\"2024-06-19T08:42:15+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-comparison-of-the-champions-angular-vs-vue\\\/#breadcrumb\"},\"inLanguage\":\"cs-CZ\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-comparison-of-the-champions-angular-vs-vue\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"cs-CZ\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-comparison-of-the-champions-angular-vs-vue\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/angular-vs-vue.png\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/angular-vs-vue.png\",\"width\":960,\"height\":540},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/the-comparison-of-the-champions-angular-vs-vue\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thecodest.co\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Comparison of The Champions: Angular vs Vue\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"name\":\"The Codest\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thecodest.co\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"cs-CZ\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"cs-CZ\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"width\":144,\"height\":36,\"caption\":\"The Codest\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/pl.linkedin.com\\\/company\\\/codest\",\"https:\\\/\\\/clutch.co\\\/profile\\\/codest\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\",\"name\":\"thecodest\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"cs-CZ\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"caption\":\"thecodest\"},\"url\":\"https:\\\/\\\/thecodest.co\\\/cs\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Srovn\u00e1n\u00ed \u0161ampion\u016f: Angular vs Vue - The Codest","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thecodest.co\/cs\/blog\/srovnani-sampionu-angular-vs-vue\/","og_locale":"cs_CZ","og_type":"article","og_title":"The Comparison of The Champions: Angular vs Vue","og_description":"Currently, there are a few frontend frameworks used commonly and constantly developed by its creators, each slightly different than the other. And yet, they may have something in common. Here is a comparison based on the development process \u2013 Google\u2019s Angular vs. open-source Vue.js:","og_url":"https:\/\/thecodest.co\/cs\/blog\/srovnani-sampionu-angular-vs-vue\/","og_site_name":"The Codest","article_published_time":"2021-12-22T10:06:30+00:00","article_modified_time":"2024-06-19T08:42:15+00:00","og_image":[{"width":960,"height":540,"url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/angular-vs-vue.png","type":"image\/png"}],"author":"thecodest","twitter_card":"summary_large_image","twitter_misc":{"Written by":"thecodest","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thecodest.co\/blog\/the-comparison-of-the-champions-angular-vs-vue\/#article","isPartOf":{"@id":"https:\/\/thecodest.co\/blog\/the-comparison-of-the-champions-angular-vs-vue\/"},"author":{"name":"thecodest","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76"},"headline":"The Comparison of The Champions: Angular vs Vue","datePublished":"2021-12-22T10:06:30+00:00","dateModified":"2024-06-19T08:42:15+00:00","mainEntityOfPage":{"@id":"https:\/\/thecodest.co\/blog\/the-comparison-of-the-champions-angular-vs-vue\/"},"wordCount":1145,"commentCount":0,"publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"image":{"@id":"https:\/\/thecodest.co\/blog\/the-comparison-of-the-champions-angular-vs-vue\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/angular-vs-vue.png","articleSection":["Software Development"],"inLanguage":"cs-CZ","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thecodest.co\/blog\/the-comparison-of-the-champions-angular-vs-vue\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thecodest.co\/blog\/the-comparison-of-the-champions-angular-vs-vue\/","url":"https:\/\/thecodest.co\/blog\/the-comparison-of-the-champions-angular-vs-vue\/","name":"Srovn\u00e1n\u00ed \u0161ampion\u016f: Angular vs Vue - The Codest","isPartOf":{"@id":"https:\/\/thecodest.co\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thecodest.co\/blog\/the-comparison-of-the-champions-angular-vs-vue\/#primaryimage"},"image":{"@id":"https:\/\/thecodest.co\/blog\/the-comparison-of-the-champions-angular-vs-vue\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/angular-vs-vue.png","datePublished":"2021-12-22T10:06:30+00:00","dateModified":"2024-06-19T08:42:15+00:00","breadcrumb":{"@id":"https:\/\/thecodest.co\/blog\/the-comparison-of-the-champions-angular-vs-vue\/#breadcrumb"},"inLanguage":"cs-CZ","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/the-comparison-of-the-champions-angular-vs-vue\/"]}]},{"@type":"ImageObject","inLanguage":"cs-CZ","@id":"https:\/\/thecodest.co\/blog\/the-comparison-of-the-champions-angular-vs-vue\/#primaryimage","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/angular-vs-vue.png","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/angular-vs-vue.png","width":960,"height":540},{"@type":"BreadcrumbList","@id":"https:\/\/thecodest.co\/blog\/the-comparison-of-the-champions-angular-vs-vue\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thecodest.co\/"},{"@type":"ListItem","position":2,"name":"The Comparison of The Champions: Angular vs Vue"}]},{"@type":"WebSite","@id":"https:\/\/thecodest.co\/#website","url":"https:\/\/thecodest.co\/","name":"The Codest","description":"","publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thecodest.co\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"cs-CZ"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"cs-CZ","@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","width":144,"height":36,"caption":"The Codest"},"image":{"@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/pl.linkedin.com\/company\/codest","https:\/\/clutch.co\/profile\/codest"]},{"@type":"Person","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76","name":"thecodest","image":{"@type":"ImageObject","inLanguage":"cs-CZ","@id":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","caption":"thecodest"},"url":"https:\/\/thecodest.co\/cs\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/posts\/3663","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/comments?post=3663"}],"version-history":[{"count":11,"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/posts\/3663\/revisions"}],"predecessor-version":[{"id":8032,"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/posts\/3663\/revisions\/8032"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/media\/3664"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/media?parent=3663"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/categories?post=3663"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/tags?post=3663"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}