{"id":20542,"date":"2023-05-01T07:24:06","date_gmt":"2023-05-01T03:54:06","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/vue-class-components-with-typescript-h8i\/"},"modified":"2023-05-01T07:24:06","modified_gmt":"2023-05-01T03:54:06","slug":"vue-class-components-with-typescript-h8i","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/vue-class-components-with-typescript-h8i\/","title":{"rendered":"\u0627\u062c\u0632\u0627\u06cc \u06a9\u0644\u0627\u0633 Vue \u0628\u0627 TypeScript"},"content":{"rendered":"<div data-article-id=\"1453241\" id=\"article-body\">\n<p>\u0627\u06cc\u0646 \u06cc\u06a9 \u0645\u0648\u0636\u0648\u0639 \u0642\u062f\u06cc\u0645\u06cc \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u0627\u0646\u062c\u0645\u0646 Vue \u0647\u0646\u0648\u0632 \u062f\u0631 \u0645\u0648\u0631\u062f \u067e\u0631\u0648\u0698\u0647 \u0647\u0627\u06cc \u062d\u0631\u0641\u0647 \u0627\u06cc \u062f\u0631 Vue2 \u06af\u06cc\u0631 \u06a9\u0631\u062f\u0647 \u0627\u0633\u062a \u0648 \u0641\u06a9\u0631 \u0645\u06cc \u06a9\u0646\u0645 \u0627\u06af\u0631 \u0628\u0627 \u06a9\u062f\u0647\u0627\u06cc \u0642\u062f\u06cc\u0645\u06cc \u0645\u0648\u0627\u062c\u0647 \u0634\u062f\u06cc\u062f\u060c \u0627\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u06a9\u0648\u0686\u06a9 \u06a9\u0645\u06a9 \u062e\u0648\u0627\u0647\u062f \u06a9\u0631\u062f.<\/p>\n<p>\u0627\u062c\u0632\u0627\u06cc \u06a9\u0644\u0627\u0633 Vue \u06cc\u06a9 \u0646\u062d\u0648 \u0622\u0634\u0646\u0627\u062a\u0631 \u0628\u0631\u0627\u06cc \u0646\u0648\u0634\u062a\u0646 \u0627\u062c\u0632\u0627\u06cc Vue \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0644\u0627\u0633 \u0647\u0627 \u0628\u0647 \u062c\u0627\u06cc \u0627\u0634\u06cc\u0627\u0621 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u0646\u062f.  \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0628\u0627 TypeScript \u062a\u0631\u06a9\u06cc\u0628 \u0645\u06cc \u0634\u0648\u062f\u060c \u062a\u0627\u06cc\u067e \u062b\u0627\u0628\u062a\u060c \u062a\u06a9\u0645\u06cc\u0644 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0647\u062a\u0631 \u0648 \u0628\u0631\u0631\u0633\u06cc \u0646\u0648\u0639 \u0628\u0647\u0628\u0648\u062f \u06cc\u0627\u0641\u062a\u0647 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u06cc\u062f.  \u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639 \u06a9\u0627\u0631 \u0628\u0627 Vue Class Components \u0648 TypeScript\u060c \u0627\u06cc\u0646 \u0645\u0631\u0627\u062d\u0644 \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f:<\/p>\n<p>\u0646\u0635\u0628 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627:<\/p>\n<p>\u0645\u0637\u0645\u0626\u0646 \u0634\u0648\u06cc\u062f \u06a9\u0647 Node.js \u0648 npm \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f.  \u0633\u067e\u0633 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Vue CLI \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u062c\u062f\u06cc\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>npm install -g @vue\/cli\nvue create my-project\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>&#8220;\u0627\u0646\u062a\u062e\u0627\u0628 \u062f\u0633\u062a\u06cc \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627&#8221; \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f \u0648 TypeScript \u0631\u0627 \u0628\u0647 \u0647\u0645\u0631\u0627\u0647 \u0647\u0631 \u0648\u06cc\u0698\u06af\u06cc \u062f\u06cc\u06af\u0631\u06cc \u06a9\u0647 \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a Vue Class \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f:<\/p>\n<p>\u0628\u0647 \u067e\u0648\u0634\u0647 \u067e\u0631\u0648\u0698\u0647 \u062c\u062f\u06cc\u062f \u062e\u0648\u062f \u0628\u0631\u0648\u06cc\u062f \u0648 \u0628\u0633\u062a\u0647 \u0647\u0627\u06cc vue-class-component \u0648 vue-property-decorator \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>cd my-project\nnpm install vue-class-component vue-property-decorator\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc main.ts:<\/p>\n<p>\u062f\u0631 src\/main.ts\u060c \u0645\u0637\u0645\u0626\u0646 \u0634\u0648\u06cc\u062f \u06a9\u0647 Vue \u0631\u0627 \u0627\u0632 &#8216;vue&#8217; \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u0648 \u0627\u0632 \u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>import Vue from 'vue';\nimport App from '.\/App.vue';\n\nVue.config.productionTip = false;\n\nnew Vue({\n  render: (h) =&gt; h(App),\n}).$mount('#app');\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u06cc\u06a9 \u062c\u0632\u0621 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u06a9\u0644\u0627\u0633 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/p>\n<p>\u062f\u0631 src\/components \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u062c\u062f\u06cc\u062f \u0628\u0647 \u0646\u0627\u0645 HelloWorld.vue \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.  \u0627\u06cc\u0646 \u062c\u0632\u0621 \u06a9\u0644\u0627\u0633 \u0645\u062d\u0648\u0631 \u0634\u0645\u0627 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>&lt;template&gt;\n  &lt;div&gt;\n    &lt;h1&gt;{{ message }}&lt;\/h1&gt;\n    &lt;button @click=\"onClick\"&gt;Click me&lt;\/button&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n\n&lt;script lang=\"ts\"&gt;\nimport { Vue, Component, Prop } from 'vue-property-decorator';\n\n@Component\nexport default class HelloWorld extends Vue {\n  @Prop({ default: 'Hello, World!' }) private message!: string;\n\n  private onClick() {\n    this.$emit('clicked');\n  }\n}\n&lt;\/script&gt;\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u062a\u0641\u06a9\u06cc\u06a9 \u06a9\u062f \u0622\u0645\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<ul>\n<li>Vue\u060c Component \u0648 Prop \u0631\u0627 \u0627\u0632 \u0628\u0633\u062a\u0647 vue-property-decorator \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u0627\u0632 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 @Component \u0628\u0631\u0627\u06cc \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0644\u0627\u0633 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u062c\u0632\u0621 Vue \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u06a9\u0644\u0627\u0633 Vue \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0644\u0627\u0633 \u062c\u0632\u0621 \u062e\u0648\u062f \u06af\u0633\u062a\u0631\u0634 \u062f\u0647\u06cc\u062f.<\/li>\n<li>\u0627\u0632 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 @Prop \u0628\u0631\u0627\u06cc \u062a\u0639\u0631\u06cc\u0641 props \u0628\u0631\u0627\u06cc \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u0645\u062a\u062f\u0647\u0627 \u0648 \u0633\u0627\u06cc\u0631 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u062c\u0632\u0621 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0627\u0639\u0636\u0627\u06cc \u06a9\u0644\u0627\u0633 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ul>\n<p>\u0627\u0632 \u0645\u0624\u0644\u0641\u0647 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u06a9\u0644\u0627\u0633 \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a HelloWorld \u062e\u0648\u062f \u062f\u0631 \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a Vue \u062f\u06cc\u06af\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>&lt;template&gt;\n  &lt;div&gt;\n    &lt;HelloWorld @clicked=\"onHelloWorldClicked\" \/&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n\n&lt;script lang=\"ts\"&gt;\nimport { Vue, Component } from 'vue-property-decorator';\nimport HelloWorld from '.\/components\/HelloWorld.vue';\n\n@Component({\n  components: {\n    HelloWorld,\n  },\n})\nexport default class App extends Vue {\n  private onHelloWorldClicked() {\n    console.log('HelloWorld component was clicked');\n  }\n}\n&lt;\/script&gt;\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062e\u0648\u062f\u0634\u0647!  \u0627\u06a9\u0646\u0648\u0646 \u0627\u0635\u0648\u0644 \u0627\u0648\u0644\u06cc\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a \u0647\u0627\u06cc \u06a9\u0644\u0627\u0633 Vue \u0628\u0627 TypeScript \u0631\u0627 \u0645\u06cc \u062f\u0627\u0646\u06cc\u062f.  \u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f \u0627\u0632 \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0646\u0648\u0639 \u0648 \u062a\u06a9\u0645\u06cc\u0644 \u062e\u0648\u062f\u06a9\u0627\u0631 \u06a9\u062f TypeScript \u062f\u0631 \u062d\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0627 \u0645\u0624\u0644\u0641\u0647\u200c\u0647\u0627\u06cc Vue \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a \u0647\u0627\u06cc \u06a9\u0644\u0627\u0633 Vue \u0628\u0647 \u0627\u062c\u0632\u0627\u06cc \u0645\u0639\u0645\u0648\u0644\u06cc Vue\u060c \u0628\u0627\u06cc\u062f \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0633\u06cc\u0646\u062a\u06a9\u0633 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0634\u06cc \u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc \u06a9\u0646\u06cc\u062f.  \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u062b\u0627\u0644\u06cc \u0627\u0632 \u0646\u062d\u0648\u0647 \u062a\u0628\u062f\u06cc\u0644 \u06cc\u06a9 \u062c\u0632\u0621 \u0633\u0627\u062f\u0647 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u06a9\u0644\u0627\u0633 \u0628\u0647 \u06cc\u06a9 \u062c\u0632\u0621 \u0645\u0639\u0645\u0648\u0644\u06cc Vue \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>&lt;!-- class-based component --&gt;\n&lt;template&gt;\n  &lt;div&gt;\n    &lt;h1&gt;{{ message }}&lt;\/h1&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n\n&lt;script lang=\"ts\"&gt;\nimport { Vue, Component } from 'vue-property-decorator';\n\n@Component\nexport default class HelloWorld extends Vue {\n  private message=\"Hello, World!\";\n}\n&lt;\/script&gt;\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>&lt;!-- converted normal Vue component --&gt;\n&lt;template&gt;\n  &lt;div&gt;\n    &lt;h1&gt;{{ message }}&lt;\/h1&gt;\n  &lt;\/div&gt;\n&lt;\/template&gt;\n\n&lt;script lang=\"ts\"&gt;\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n  data() {\n    return {\n      message: 'Hello, World!',\n    };\n  },\n});\n&lt;\/script&gt;\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u0686\u06cc\u0632\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0645\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f\u06cc\u0645:<\/p>\n<ul>\n<li>\u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 @Component \u0631\u0627 \u0628\u0631\u062f\u0627\u0631\u06cc\u062f \u0648 \u06a9\u0644\u0627\u0633 Vue \u0631\u0627 \u06af\u0633\u062a\u0631\u0634 \u062f\u0647\u06cc\u062f.<\/li>\n<li>\u06cc\u06a9 \u062a\u0627\u0628\u0639 \u062f\u0627\u062f\u0647 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u06cc\u06a9 \u0634\u06cc \u0631\u0627 \u0628\u0627 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627 \u0648 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u062c\u0632\u0621 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f.<\/li>\n<li>\u0627\u0632 \u062a\u0627\u0628\u0639 defineComponent \u0627\u0632 \u0628\u0633\u062a\u0647 vue \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ul>\n<p>\u062a\u0648\u062c\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u062a\u0627\u0628\u0639 \u062f\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc \u062a\u0639\u0631\u06cc\u0641 \u062f\u0627\u062f\u0647\u200c\u0647\u0627\u06cc \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u06a9\u0647 \u0645\u0634\u0627\u0628\u0647 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0627 decorator @Prop \u062f\u0631 Vue Class Components \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u0627\u0633\u062a.  \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u06af\u0632\u06cc\u0646\u0647\u200c\u0647\u0627\u06cc \u0645\u0624\u0644\u0641\u0647 \u062f\u06cc\u06af\u0631\u060c \u0645\u0627\u0646\u0646\u062f \u0631\u0648\u0634\u200c\u0647\u0627\u060c \u0645\u062d\u0627\u0633\u0628\u0647\u200c\u0634\u062f\u0647\u060c \u0648 \u062a\u0645\u0627\u0634\u0627\u06af\u0631\u0627\u0646 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u0648\u0627\u0628\u0639 \u0645\u0634\u0627\u0628\u0647 \u062f\u0631 \u062a\u0627\u0628\u0639 defineComponent \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0628\u0647 \u062e\u0627\u0637\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u0633\u06cc\u0646\u062a\u06a9\u0633 Vue Class Component \u0627\u063a\u0644\u0628 \u0628\u0647 \u062f\u0644\u06cc\u0644 \u0628\u0647\u0628\u0648\u062f \u062e\u0648\u0627\u0646\u0627\u06cc\u06cc \u0648 \u0642\u0627\u0628\u0644\u06cc\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u062a\u0631\u062c\u06cc\u062d \u062f\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f.  \u0627\u06af\u0631 \u062f\u0631 \u062d\u0627\u0644 \u062a\u0628\u062f\u06cc\u0644 \u06cc\u06a9 \u062c\u0632\u0621 \u0628\u0632\u0631\u06af \u06cc\u0627 \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0647\u0633\u062a\u06cc\u062f\u060c \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0627\u0645\u067e\u0648\u0646\u0646\u062a \u0647\u0627\u06cc \u06a9\u0644\u0627\u0633 Vue\u060c \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0627\u062c\u0632\u0627\u06cc \u06a9\u0648\u0686\u06a9\u062a\u0631 \u0648 \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f.<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0627\u06cc\u0646 \u06cc\u06a9 \u0645\u0648\u0636\u0648\u0639 \u0642\u062f\u06cc\u0645\u06cc \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u0627\u0646\u062c\u0645\u0646 Vue \u0647\u0646\u0648\u0632 \u062f\u0631 \u0645\u0648\u0631\u062f \u067e\u0631\u0648\u0698\u0647 \u0647\u0627\u06cc \u062d\u0631\u0641\u0647 \u0627\u06cc \u062f\u0631 Vue2 \u06af\u06cc\u0631 \u06a9\u0631\u062f\u0647 \u0627\u0633\u062a \u0648 \u0641\u06a9\u0631 \u0645\u06cc \u06a9\u0646\u0645 \u0627\u06af\u0631 \u0628\u0627 \u06a9\u062f\u0647\u0627\u06cc \u0642\u062f\u06cc\u0645\u06cc \u0645\u0648\u0627\u062c\u0647 \u0634\u062f\u06cc\u062f\u060c \u0627\u06cc\u0646 \u0646\u06a9\u062a\u0647 \u06a9\u0648\u0686\u06a9 \u06a9\u0645\u06a9 \u062e\u0648\u0627\u0647\u062f \u06a9\u0631\u062f. \u0627\u062c\u0632\u0627\u06cc \u06a9\u0644\u0627\u0633 Vue \u06cc\u06a9 \u0646\u062d\u0648 \u0622\u0634\u0646\u0627\u062a\u0631 \u0628\u0631\u0627\u06cc \u0646\u0648\u0634\u062a\u0646 \u0627\u062c\u0632\u0627\u06cc Vue \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0644\u0627\u0633 \u0647\u0627 \u0628\u0647 \u062c\u0627\u06cc \u0627\u0634\u06cc\u0627\u0621 \u0627\u0631\u0627\u0626\u0647 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":20543,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-20542","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/20542","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=20542"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/20542\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/20543"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=20542"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=20542"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=20542"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}