牛牛的幸福稳稳的 發表於 2020-9-24 11:28:00

vue如何使用TypeScript语法

<h2>前言</h2>
<p>已经用TS写了半年了多了,然后总结下如何如何在vue项目中使用ts吧,好复习</p>
<p>主要内容包含:组件,axios请求,vuex,父子组件传值,Mixins等。</p>
<p>vue中常用功能点代码用js/ts写法分开书写,这样会好区别和理解</p>
<p>&nbsp;</p>
<h2 data-id="heading-6">一、新建项目</h2>
<div>
<div class="cnblogs_code">
<pre>vue create vue-ts-admin</pre>
</div>
<p>按步骤开始安装,安装过程中选择TypeScript,vuex,路由router; 使用<code>npm run serve</code>启动项目</p>
<h3 data-id="heading-5">1. 在vue中书写ts的必备插件!</h3>
<p>vue-class-component 强化 Vue 组件,使用装饰器语法使 Vue 组件更好的跟TS结合使用。 vue-property-decorator在 vue-class-component 的基础上增加了更多与 Vue 相关的装饰器,使Vue组件更好的跟TS结合使用。</p>
<div class="cnblogs_code">
<pre>npm i vue-class-component -s-<span style="color: rgba(0, 0, 0, 1)">d
npm ivue</span>-property-decorator -s-d</pre>
</div>
<h2 data-id="heading-6">二、ts写vue单文件写法</h2>
<h3 data-id="heading-7">2.1单页面格式怎么写</h3>
<p>vue单页面的格式的写法不变,同样由template、script、style组成; 唯一区别:<code>&lt;script src="ts"&gt;</code></p>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;&lt;/div&gt;
&lt;/template&gt;
&lt;script src="ts"&gt;&lt;/script&gt;
&lt;style scoped&gt;&lt;/style&gt;</pre>
</div>
<h4 data-id="heading-8">2.1.1 vue项目中的mian.ts及app.vue</h4>
<p><strong>main.ts写法</strong></p>
<div class="cnblogs_code">
<pre>import Vue from 'vue'<span style="color: rgba(0, 0, 0, 1)">
import App from </span>'./App.vue'
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">vuex</span>
import store from './store'
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 路由</span>
import router from './router'<span style="color: rgba(0, 0, 0, 1)">
Vue.config.productionTip </span>= <span style="color: rgba(0, 0, 255, 1)">false</span>

<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Vue({
store,
router,
render: h </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> h(App)
}).$mount(</span>'#app')</pre>
</div>
<p><strong>app.vue写法</strong></p>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div id="app"&gt;
    &lt;!-- 使用路由的方法,也可以不用路由,直接引子组件 --&gt;
    &lt;router-view&gt;&lt;/router-view&gt;
&lt;/div&gt;
&lt;/template&gt;

&lt;script lang="ts"&gt;
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">注意点:1.下面的代码必须在每个页面都中引入</span>
import { Component, Vue } from 'vue-property-decorator'<span style="color: rgba(0, 0, 0, 1)">;
@Component
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">注意点:2.每个页面都有组件名称:App/自定义</span>
export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class App extends Vue {

}
</span>&lt;/script&gt;</pre>
</div>
<h3 data-id="heading-9">&nbsp;</h3>
<div>
<div>
<h3 data-id="heading-9">2.2 如何在Data双向绑定值</h3>
<ul>
<li>js写法</li>
</ul>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;
    &lt;h1&gt;{{msg}}&lt;/h1&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;<span style="color: rgba(0, 0, 0, 1)">
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
   data() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
      msg: </span>""<span style="color: rgba(0, 0, 0, 1)">,
    };
},
}
</span>&lt;/script&gt;</pre>
</div>
<pre><code class="hljs language-html copyable" lang="html"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="javascript"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-tag"><span class="hljs-name"><span class="copy-code-btn">&nbsp;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<ul>
<li>ts写法</li>
</ul>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;
    &lt;h1&gt;{{msg}}&lt;/h1&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;script src="ts"&gt;<span style="color: rgba(0, 0, 0, 1)">
import { Component, Vue, } from </span>"vue-property-decorator"<span style="color: rgba(0, 0, 0, 1)">;
@Component
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class Home extends Vue {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">注意点:3.public是公用的意思,可省略;没有data,return,直接放要绑定的值</span>
public msg!: number |<span style="color: rgba(0, 0, 0, 1)"> string;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> msg!: number | string;</span>
<span style="color: rgba(0, 0, 0, 1)">}
</span>&lt;/script&gt;</pre>
</div>
<h3 data-id="heading-10">2.3 如何引入子组件及组件传值</h3>
<ul>
<li>js写法</li>
</ul>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;
    &lt;MenuBar :setMsg="msg"/&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;<span style="color: rgba(0, 0, 0, 1)">
import MenuBar from </span>"../components/MenuBar.vue"<span style="color: rgba(0, 0, 0, 1)">;
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
props: {
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 父组件的值</span>
<span style="color: rgba(0, 0, 0, 1)">    fatherMsg: {
      type: String
    }
},
components: {
    MenuBar
},
data() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
      msg: </span>""<span style="color: rgba(0, 0, 0, 1)">,
    };
},
}
</span>&lt;/script&gt;</pre>
</div>
<ul>
<li>ts写法</li>
</ul>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;
    &lt;MenuBar :setMsg="msg" /&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;script src="ts"&gt;<span style="color: rgba(0, 0, 0, 1)">
import { Component, Vue, } from </span>"vue-property-decorator"<span style="color: rgba(0, 0, 0, 1)">;
import MenuBar from </span>"../components/MenuBar.vue"<span style="color: rgba(0, 0, 0, 1)">;
@Component({
components: {
    MenuBar
},
})
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class Home extends Vue {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 父组件的传递过来的值</span>
@Prop() private fatherMsg!<span style="color: rgba(0, 0, 0, 1)">: string;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">传递给子组件的值</span>
public msg!: number |<span style="color: rgba(0, 0, 0, 1)"> string;
}
</span>&lt;/script&gt;</pre>
</div>
<h3 data-id="heading-11">2.4 生命周期的用法</h3>
<ul>
<li>js写法</li>
</ul>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;
    &lt;h1&gt;{{msg}}&lt;/h1&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;
<span style="color: rgba(0, 0, 255, 1)">var</span> data = {name: "小明",age: 18<span style="color: rgba(0, 0, 0, 1)">};
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
   data() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
      msg: </span>""<span style="color: rgba(0, 0, 0, 1)">,
    };
},
created() {
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.msg = data.name + data.age + "岁"<span style="color: rgba(0, 0, 0, 1)">;
},
}
</span>&lt;/script&gt;</pre>
</div>
<ul>
<li>ts写法</li>
</ul>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;
    &lt;h1&gt;{{msg}}&lt;/h1&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;scriptsrc="ts"&gt;<span style="color: rgba(0, 0, 0, 1)">
import { Component, Vue, } from </span>"vue-property-decorator"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> data = {name: "小明",age: 18<span style="color: rgba(0, 0, 0, 1)">};
@Component
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class Home extends Vue {
public msg</span>!: number |<span style="color: rgba(0, 0, 0, 1)"> string;
created(): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {
    console.log(</span>"created"<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.msg = data.name + data.age + "岁"<span style="color: rgba(0, 0, 0, 1)">;
}
beforeCreate(): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {
    console.log(</span>"beforecreate"<span style="color: rgba(0, 0, 0, 1)">);
}
beforeMount(): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {
    console.log(</span>"beforemounted"<span style="color: rgba(0, 0, 0, 1)">);
}
mounted(): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {
    console.log(</span>"mounted"<span style="color: rgba(0, 0, 0, 1)">);
}
}
</span>&lt;/script&gt;</pre>
</div>
<h3 data-id="heading-12">2.5 methods方法</h3>
<ul>
<li>js写法</li>
</ul>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;
    &lt;h1&gt;{{count}}&lt;/h1&gt;
    &lt;button class="btn" @click="addCount"&gt;add&lt;/button&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;
<span style="color: rgba(0, 0, 255, 1)">var</span> data = {name: "小明",age: 18<span style="color: rgba(0, 0, 0, 1)">};
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
   data() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
      count: </span>0<span style="color: rgba(0, 0, 0, 1)">,
    };
},
methods: {
    addCount() {
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span>.count++<span style="color: rgba(0, 0, 0, 1)">;
    }
}
}
</span>&lt;/script&gt;</pre>
</div>
<ul>
<li>ts写法</li>
</ul>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;
    &lt;h1&gt;{{count}}&lt;/h1&gt;
    &lt;button class="btn" @click="addCount"&gt;add&lt;/button&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;scriptsrc="ts"&gt;<span style="color: rgba(0, 0, 0, 1)">
import { Component, Vue, } from </span>"vue-property-decorator"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> data = {name: "小明",age: 18<span style="color: rgba(0, 0, 0, 1)">};
@Component
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class Home extends Vue {
public count: number </span>= 0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   方法也是直接写到外层</span>
<span style="color: rgba(0, 0, 0, 1)">addCount(): number {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span>.count++<span style="color: rgba(0, 0, 0, 1)">;
}
}
</span>&lt;/script&gt;</pre>
</div>
<pre><code class="hljs language-html copyable" lang="html"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-attr"><span class="hljs-string"><span class="javascript"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-keyword"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-number"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-class"><span class="hljs-keyword"><span class="hljs-title"><span class="hljs-keyword"><span class="hljs-title"><span class="hljs-number"><span class="hljs-comment"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-tag"><span class="hljs-name"><span class="copy-code-btn">&nbsp;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<h3 data-id="heading-13">2.6 计算属性(computed)和监听属性(watch)</h3>
<ul>
<li>js写法</li>
</ul>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;
&lt;h1&gt;计算属性:{{countChange}},结果+2:{{watchMsg}}&lt;/h1&gt;
    &lt;button class="btn" @click="addCcountChange"&gt;计算属性:add&lt;/button&gt;
    &lt;h1&gt;监听:{{count}},结果+1:{{watchMsg}}&lt;/h1&gt;
    &lt;button class="btn" @click="addCount"&gt;监听add&lt;/button&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;
<span style="color: rgba(0, 0, 255, 1)">var</span> data = {name: "小明",age: 18<span style="color: rgba(0, 0, 0, 1)">};
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
   data() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
      count: </span>0<span style="color: rgba(0, 0, 0, 1)">,
      watchMsg: </span>""<span style="color: rgba(0, 0, 0, 1)">
    };
},
watch: {
    count: {
      handler(newVal, oldVal) {
      </span><span style="color: rgba(0, 0, 255, 1)">if</span> (newVal &lt; 10<span style="color: rgba(0, 0, 0, 1)">) {
          </span><span style="color: rgba(0, 0, 255, 1)">this</span>.watchMsg = "我是数字" +<span style="color: rgba(0, 0, 0, 1)"> newVal;
      } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
          </span><span style="color: rgba(0, 0, 255, 1)">this</span>.watchMsg = "我会继续增长"<span style="color: rgba(0, 0, 0, 1)">;
      }
      },
      immediate: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
    },
    watchMsg: {
      handler(newVal, oldVal) {
      console.log(newVal);
      },
      immediate: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
    }
},
computed: {
    countChange: {
      get() {
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.count;
      },
      set(val) {
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.count = val + 1<span style="color: rgba(0, 0, 0, 1)">;
      }
    }
},
methods: {
   addCcountChange() {
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.countChange;
    },
    addCount() {
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span>.count++<span style="color: rgba(0, 0, 0, 1)">;
    }
}
}
</span>&lt;/script&gt;</pre>
</div>
<ul>
<li>ts写法</li>
</ul>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;
    &lt;h1&gt;计算属性:{{countChange}},结果+2:{{watchMsg}}&lt;/h1&gt;
    &lt;button class="btn" @click="addCcountChange"&gt;计算属性:add&lt;/button&gt;
    &lt;h1&gt;监听:{{count}},结果+1:{{watchMsg}}&lt;/h1&gt;
    &lt;button class="btn" @click="addCount"&gt;监听add&lt;/button&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;scriptsrc="ts"&gt;
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 注意1.导入Watch</span>
import { Component, Vue,Watch } from "vue-property-decorator"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> data = {name: "小明",age: 18<span style="color: rgba(0, 0, 0, 1)">};
@Component
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class Home extends Vue {
public count: number </span>= 0<span style="color: rgba(0, 0, 0, 1)">;
public watchMsg: string </span>= "开始"<span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   计算属性</span>
<span style="color: rgba(0, 0, 0, 1)">get countChange(): number {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.count;
}
set countChange(val) {
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.count = val + 1<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 注意2. 监听多个就导入多个Watch,命名自定义 clgMsg(newVal: string)</span>
@Watch("count"<span style="color: rgba(0, 0, 0, 1)">)
Count(newVal: number) {
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (newVal &lt; 10<span style="color: rgba(0, 0, 0, 1)">) {
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.watchMsg = "我是数字" +<span style="color: rgba(0, 0, 0, 1)"> newVal;
    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.watchMsg = "我会继续增长"<span style="color: rgba(0, 0, 0, 1)">;
    }
}
@Watch(</span>"watchMsg"<span style="color: rgba(0, 0, 0, 1)">)
clgMsg(newVal: string) {
    console.log(newVal);
}
   </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   方法</span>
<span style="color: rgba(0, 0, 0, 1)">addCcountChange(): number {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span>.countChange++<span style="color: rgba(0, 0, 0, 1)">;
}
addCount(): number {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span>.count++<span style="color: rgba(0, 0, 0, 1)">;
}
}
</span>&lt;/script&gt;</pre>
</div>
<pre><code class="hljs language-html copyable" lang="html"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-attr"><span class="hljs-string"><span class="actionscript"><span class="hljs-comment"><span class="hljs-meta"><span class="hljs-meta-keyword"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-number"><span class="hljs-keyword"><span class="hljs-class"><span class="hljs-keyword"><span class="hljs-title"><span class="hljs-keyword"><span class="hljs-title"><span class="hljs-keyword"><span class="hljs-number"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-comment"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-number"><span class="hljs-comment"><span class="hljs-string"><span class="hljs-keyword"><span class="hljs-number"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-string"><span class="hljs-comment"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-tag"><span class="hljs-name"><span class="copy-code-btn">&nbsp;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<h3 data-id="heading-14">2.7 Mixins混入如何使用</h3>
<p>Mixins混入是公共方法同一调用;</p>
<h4 data-id="heading-15">2.7.1 Mixins文件的写法</h4>
<ul>
<li>js写法</li>
</ul>
<div class="cnblogs_code">
<pre>export const TestMixins =<span style="color: rgba(0, 0, 0, 1)"> {
    data(){
      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">{
      form:{}
      }
    },
    methods:{
      handleSubmit(name): {
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">new</span> Promise((resolve) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
            resolve()
      })
      }
      handleReset(name){
      console.log(name)
      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> name
      }
    }
}</span></pre>
</div>
<ul>
<li>TS写法</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">必须引入</span>
import { Component, Vue, } from "vue-property-decorator"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 导出模块</span>
declare module 'vue/types/vue'<span style="color: rgba(0, 0, 0, 1)"> {
    interface Vue {
      form: Object
      handleSubmit(name: any): Promise</span>&lt;any&gt;<span style="color: rgba(0, 0, 0, 1)">
      handleReset(name: any): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)">
    }
}
@Component
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class TestMixins extends Vue {
    form: Object </span>=<span style="color: rgba(0, 0, 0, 1)"> {}
    handleSubmit(name: any): Promise</span>&lt;any&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">new</span> Promise((resolve) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
            resolve()
      })
    }
    handleReset(name: any): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {
      console.log(name)
      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> name
    }
}</span></pre>
</div>
</div>
<div>
<pre><code class="hljs language-js copyable" lang="js"><span class="hljs-comment"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-comment"><span class="hljs-built_in"><span class="hljs-string"><span class="hljs-attr"><span class="hljs-built_in"><span class="hljs-built_in"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-class"><span class="hljs-keyword"><span class="hljs-title"><span class="hljs-keyword"><span class="hljs-title"><span class="hljs-built_in"><span class="hljs-built_in"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-built_in"><span class="hljs-function"><span class="hljs-params"><span class="hljs-keyword"><span class="hljs-built_in"><span class="hljs-keyword"><span class="copy-code-btn">&nbsp;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<h4 data-id="heading-16">2.7.2 调用Mixins的vue文件写法</h4>
<ul>
<li>js写法</li>
</ul>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;
   &lt;h1&gt;{{handleReset("测试js-mixins")}}&lt;/h1&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;<span style="color: rgba(0, 0, 0, 1)">
import TestMixins from </span>"../assets/mixin"<span style="color: rgba(0, 0, 0, 1)">;
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
   mixins: ,
   data() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
      count: </span>0<span style="color: rgba(0, 0, 0, 1)">,
    };
   },
}
</span>&lt;/script&gt;</pre>
</div>
<pre><code class="hljs language-html copyable" lang="html"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="javascript"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-attr"><span class="hljs-keyword"><span class="hljs-attr"><span class="hljs-number"><span class="hljs-tag"><span class="hljs-name"><span class="copy-code-btn">&nbsp;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<ul>
<li>ts写法</li>
</ul>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;
      &lt;h1&gt;{{handleReset("测试TS-mixins222")}}&lt;/h1&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;scriptsrc="ts"&gt;<span style="color: rgba(0, 0, 0, 1)">
import TestMixins from </span>"../assets/mixin"<span style="color: rgba(0, 0, 0, 1)">;
import { Component, Vue, Mixins} from </span>"vue-property-decorator"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 写在@Component内</span>
<span style="color: rgba(0, 0, 0, 1)">@Component({
mixins:
})
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class Home extends Vue {
public count: number </span>= 0<span style="color: rgba(0, 0, 0, 1)">;
}
</span>&lt;/script&gt;</pre>
</div>
<pre><code class="hljs language-html copyable" lang="html"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-attr"><span class="hljs-string"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-tag"><span class="hljs-name"><span class="hljs-attr"><span class="hljs-string"><span class="javascript"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-comment"><span class="hljs-attr"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-class"><span class="hljs-keyword"><span class="hljs-title"><span class="hljs-keyword"><span class="hljs-title"><span class="hljs-number"><span class="hljs-tag"><span class="hljs-name"><span class="copy-code-btn">&nbsp;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<h3 data-id="heading-17">2.8 路由vue-Router及路由守卫</h3>
<h4 data-id="heading-18">2.8.1 安装导入路由—— mian.ts</h4>
<div class="cnblogs_code">
<pre>import Vue from 'vue'<span style="color: rgba(0, 0, 0, 1)">
import App from </span>'./App.vue'<span style="color: rgba(0, 0, 0, 1)">
import store from </span>'./store'<span style="color: rgba(0, 0, 0, 1)">
import router from </span>'./router'
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">1.导入组件</span>
import Component from 'vue-class-component'<span style="color: rgba(0, 0, 0, 1)">
Vue.config.productionTip </span>= <span style="color: rgba(0, 0, 255, 1)">false</span>

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 1.全局的路由守卫,js和ts的写法一致;</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)"> 2.组件内路由守卫,如果要在组件内部使用路由监听,路由钩子beforeRouteEnter,beforeRouteLeave,beforeRouteUpdate不生效。所以在此注册;</span>
<span style="color: rgba(0, 0, 0, 1)">Component.registerHooks([
</span>'beforeRouteEnter',<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">进入路由之前</span>
'beforeRouteLeave',<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">离开路由之前</span>
'beforeRouteUpdate'<span style="color: rgba(0, 0, 0, 1)">
])

</span><span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Vue({
store,
router,
render: h </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> h(App)
}).$mount(</span>'#app')</pre>
</div>
<pre><code class="hljs language-js copyable" lang="js"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-comment"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-literal"><span class="hljs-comment"><span class="hljs-comment"><span class="hljs-string"><span class="hljs-comment"><span class="hljs-string"><span class="hljs-comment"><span class="hljs-string"><span class="hljs-keyword"><span class="hljs-attr"><span class="hljs-function"><span class="hljs-params"><span class="hljs-string"><span class="copy-code-btn">&nbsp;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<h4 data-id="heading-19">2.8.2 路由index文件写法—— router/index.ts</h4>
<div class="cnblogs_code">
<pre>import Vue from 'vue'<span style="color: rgba(0, 0, 0, 1)">;
import Router from </span>'vue-router'<span style="color: rgba(0, 0, 0, 1)">;
import stickyNotePage from </span>'../page/stickyNotePage.vue'<span style="color: rgba(0, 0, 0, 1)">;

export </span><span style="color: rgba(0, 0, 255, 1)">default</span> <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Router({
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> history模式</span>
    mode: 'history'<span style="color: rgba(0, 0, 0, 1)">,
    base: process.env.BASE_URL,
    routes: [
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 常规模块加载</span>
<span style="color: rgba(0, 0, 0, 1)">      {
            path: </span>'/'<span style="color: rgba(0, 0, 0, 1)">,
            name: </span>'stickyNotePage'<span style="color: rgba(0, 0, 0, 1)">,
            component: stickyNotePage,
      },
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 路由懒加载写法</span>
<span style="color: rgba(0, 0, 0, 1)">      {
            path: </span>'/hello'<span style="color: rgba(0, 0, 0, 1)">,
            name: </span>'hello'<span style="color: rgba(0, 0, 0, 1)">,
            component: () </span>=&gt; import(<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> webpackChunkName: "hello" </span><span style="color: rgba(0, 128, 0, 1)">*/</span>'../page/HelloWorld.vue'<span style="color: rgba(0, 0, 0, 1)">),
      },
      {
            path: </span>'/learn'<span style="color: rgba(0, 0, 0, 1)">,
            name: </span>'learn'<span style="color: rgba(0, 0, 0, 1)">,
            component: () </span>=&gt; import(<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> webpackChunkName: "learn" </span><span style="color: rgba(0, 128, 0, 1)">*/</span>'../page/learn.vue'<span style="color: rgba(0, 0, 0, 1)">),
      },
    ],
})
Vue.use(Router);</span></pre>
</div>
<h4 data-id="heading-20">2.8.3 在页面中如何使用路由守卫</h4>
<h5 data-id="heading-21">全局的路由守卫,js和ts的写法一致;</h5>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 全局守卫</span>
import router from './router'<span style="color: rgba(0, 0, 0, 1)">
router.beforeEach((to, from, next) </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {   
    console.log(to.path);
    next()   
})
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 全局后置钩子</span>
router.afterEach((to,from)=&gt;<span style="color: rgba(0, 0, 0, 1)">{
alert(</span>"after each"<span style="color: rgba(0, 0, 0, 1)">);
})</span></pre>
</div>
<h5 data-id="heading-22">组件内路由守卫</h5>
<ul>
<li>js写法</li>
</ul>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;
    &lt;h1&gt;{{count}}&lt;/h1&gt;
    &lt;button class="btn" @click="addCount"&gt;add&lt;/button&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;
<span style="color: rgba(0, 0, 255, 1)">var</span> data = {name: "小明",age: 18<span style="color: rgba(0, 0, 0, 1)">};
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
   data() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
      count: </span>0<span style="color: rgba(0, 0, 0, 1)">,
    };
},
   </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 进入路由触发</span>
beforeRouteEnter(to,from,next)=&gt;<span style="color: rgba(0, 0, 0, 1)">{
    console.log(</span>"beforeRouteEnter111"<span style="color: rgba(0, 0, 0, 1)">);
    next();
}
beforeRouteUpdate(to,from,next)</span>=&gt;<span style="color: rgba(0, 0, 0, 1)">{
    console.log(</span>"beforeRouteUpdate111"<span style="color: rgba(0, 0, 0, 1)">);
    next();
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 离开路由触发</span>
beforeRouteLeave(to,from,next)=&gt;<span style="color: rgba(0, 0, 0, 1)">{
    console.log(</span>"beforeRouteLeave111"<span style="color: rgba(0, 0, 0, 1)">);
    next();
}

}
</span>&lt;/script&gt;</pre>
</div>
<ul>
<li>ts写法</li>
</ul>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;
    &lt;h1&gt;{{count}}&lt;/h1&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;scriptsrc="ts"&gt;<span style="color: rgba(0, 0, 0, 1)">
import { Component, Vue, } from </span>"vue-property-decorator"<span style="color: rgba(0, 0, 0, 1)">;
@Component
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class Home extends Vue {
public count: number </span>= 0<span style="color: rgba(0, 0, 0, 1)">;
   </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 进入路由触发</span>
beforeRouteEnter(to: any, from: any, next: () =&gt; <span style="color: rgba(0, 0, 255, 1)">void</span>): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {
    console.log(</span>"beforeRouteEnter111"<span style="color: rgba(0, 0, 0, 1)">);
    next();
}
beforeRouteUpdate(to: any, from: any, next: () </span>=&gt; <span style="color: rgba(0, 0, 255, 1)">void</span>): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {
    console.log(</span>"beforeRouteUpdate111"<span style="color: rgba(0, 0, 0, 1)">);
    next();
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 离开路由触发</span>
beforeRouteLeave(to: any, from: any, next: () =&gt; <span style="color: rgba(0, 0, 255, 1)">void</span>): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {
    console.log(</span>"beforeRouteLeave111"<span style="color: rgba(0, 0, 0, 1)">);
    next();
}
}
</span>&lt;/script&gt;</pre>
</div>
<p>&nbsp;</p>
<h3 data-id="heading-23">2.9 vuex</h3>
<h4 data-id="heading-24">2.9.1 vuex/scr/store/index.ts写法</h4>
<p>js、ts写法除了类型判断其他区别不大;</p>
<div class="cnblogs_code">
<pre>import Vue from 'vue'<span style="color: rgba(0, 0, 0, 1)">
import Vuex from </span>'vuex'<span style="color: rgba(0, 0, 0, 1)">

Vue.use(Vuex)

export </span><span style="color: rgba(0, 0, 255, 1)">default</span> <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Vuex.Store({
state: {
    isShowEdit: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
    onlySticky: </span><span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">,
},
mutations: {
    SHOW_EDIT(state: any, editMemo: any) {
      console.log(editMemo)
      state.onlySticky </span>=<span style="color: rgba(0, 0, 0, 1)"> editMemo;
      state.isShowEdit </span>= <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
    }
},
actions: {
},
modules: {
}
})</span></pre>
</div>
<pre><code class="hljs language-js copyable" lang="js"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-string"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-keyword"><span class="hljs-attr"><span class="hljs-attr"><span class="hljs-literal"><span class="hljs-attr"><span class="hljs-literal"><span class="hljs-attr"><span class="hljs-attr"><span class="hljs-built_in"><span class="hljs-literal"><span class="hljs-attr"><span class="hljs-attr"><span class="copy-code-btn">&nbsp;</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<h4 data-id="heading-25">2.9.2 vuex调用单页面的写法</h4>
<ul>
<li>js写法</li>
</ul>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;
    &lt;button @click="showEdit('vuex')"&gt;测试vuex&lt;/button&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;<span style="color: rgba(0, 0, 0, 1)">
import { mapActions, mapState, mapGetters, mapMutations } from </span>"vuex"<span style="color: rgba(0, 0, 0, 1)">;
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
   data() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
      stickyList:[],
    };
   },
   created() {
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.stickyList = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.$store.state.onlySticky;
},
    methods: {
    ...mapMutations([</span>"SHOW_EDIT"<span style="color: rgba(0, 0, 0, 1)">]),
    showEdit(item) {
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.$store.commit("SHOW_EDIT"<span style="color: rgba(0, 0, 0, 1)">, item);
    },
}
}
</span>&lt;/script&gt;</pre>
</div>
<ul>
<li>ts写法</li>
</ul>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;
   &lt;button @click="showEdit('vuex')"&gt;测试vuex&lt;/button&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;scriptsrc="ts"&gt;<span style="color: rgba(0, 0, 0, 1)">
import { Component, Vue,} from </span>"vue-property-decorator"<span style="color: rgba(0, 0, 0, 1)">;
import ItemData from </span>"../model/ItemData"; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">导入类</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)"> 写在@Component内</span>
<span style="color: rgba(0, 0, 0, 1)">@Component
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class Home extends Vue {
stickyList: </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.$store.state.onlySticky;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> vuex,如果this.$store一直报错,则在单页面引入 import Vuex from 'vuex'</span>
<span style="color: rgba(0, 0, 0, 1)">showEdit(item) {
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.$store.commit("SHOW_EDIT"<span style="color: rgba(0, 0, 0, 1)">, item);
}
}
</span>&lt;/script&gt;</pre>
</div>
<h3 data-id="heading-26">2.10 axios请求数据</h3>
<h4 data-id="heading-27">2.10.1 main.ts</h4>
<div class="cnblogs_code">
<pre>import axios from 'axios'<span style="color: rgba(0, 0, 0, 1)">
Vue.prototype.$axios </span>= axios;</pre>
</div>
<pre><code class="copyable"><span class="copy-code-btn">&nbsp;</span></code></pre>
<p>关于axios的封装,在之前的博客中已经讲述过了,就不在封装,ts语法除了类型其他区别不大,这里直接使用的是挂载axios和引入axios的方式,</p>
<h4 data-id="heading-28">2.10.2 单页使用</h4>
<ul>
<li>js写法</li>
</ul>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;<span style="color: rgba(0, 0, 0, 1)">
    axios请求
</span>&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;<span style="color: rgba(0, 0, 0, 1)">
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
   data() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
    };
   },
   created() {
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 请求地址https://www.foobar.com/my-app/user/add</span>
    const url1 = "https://www.foobar.com/my-app/user/add"<span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.$axios.get(url1, { params: { type: "js" } }).then(res =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res);
    });
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使用vue代理</span>
    const url2 = "/my-app/user/add"<span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.$axios.get(url2, { params: { type: "Ts" } }).then(res =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res);
    });
},
}
</span>&lt;/script&gt;</pre>
</div>
<ul>
<li>ts写法</li>
</ul>
<div class="cnblogs_code">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;<span style="color: rgba(0, 0, 0, 1)">
    axios请求
</span>&lt;/div&gt;
&lt;/template&gt;
&lt;scriptsrc="ts"&gt;<span style="color: rgba(0, 0, 0, 1)">
import { Component, Vue,} from </span>"vue-property-decorator"<span style="color: rgba(0, 0, 0, 1)">;
import axios from </span>"axios"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 写在@Component内</span>
<span style="color: rgba(0, 0, 0, 1)">@Component
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class Home extends Vue {
   created(): </span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {
    const url1 </span>= "https://www.foobar.com/my-app/user/add"<span style="color: rgba(0, 0, 0, 1)">;
    axios.get(url1, { params: { type: </span>"js" } }).then((res: any) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res);
    });
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使用vue代理</span>
    const url2 = "/my-app/user/add"<span style="color: rgba(0, 0, 0, 1)">;
    axios.get(url2, { params: { type: </span>"Ts" } }).then((res: any) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res);
    });
}
}
</span>&lt;/script&gt;</pre>
</div>
<div>
<div>
<h2 data-id="heading-30">附:js常规书写vue--demo源码</h2>
<div class="cnblogs_code"><img id="code_img_closed_8dc1c1f6-dbbd-4f81-8eb3-686ad858cc8e" class="code_img_closed lazyload" data-src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_8dc1c1f6-dbbd-4f81-8eb3-686ad858cc8e" class="code_img_opened lazyload" style="display: none" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_8dc1c1f6-dbbd-4f81-8eb3-686ad858cc8e" class="cnblogs_code_hide">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;
    &lt;MenuBar /&gt;
    &lt;router-link :to="{path:'hello'}"&gt;测试路由守卫--&gt;去helloword&lt;/router-link&gt;
    &lt;h1&gt;{{handleReset("测试mixins222")}}&lt;/h1&gt;
    &lt;h1&gt;{{msg}}&lt;/h1&gt;
    &lt;h1&gt;{{fatherMsg}}&lt;/h1&gt;
    &lt;h1&gt;计算属性:{{countChange}},结果:{{watchMsg}}&lt;/h1&gt;
    &lt;button class="btn" @click="addCcountChange"&gt;计算属性:add&lt;/button&gt;
    &lt;h1&gt;监听:{{count}},结果:{{watchMsg}}&lt;/h1&gt;
    &lt;button class="btn" @click="addCount"&gt;监听add&lt;/button&gt;
    &lt;button @click="showEdit('vuex')"&gt;测试vuex&lt;/button&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;<span style="color: rgba(0, 0, 0, 1)">
import MenuBar from </span>"../components/MenuBar.vue"<span style="color: rgba(0, 0, 0, 1)">;
import TestMixins from </span>"../assets/mixin"<span style="color: rgba(0, 0, 0, 1)">;
import { mapActions, mapState, mapGetters, mapMutations } from </span>"vuex"<span style="color: rgba(0, 0, 0, 1)">;

</span><span style="color: rgba(0, 0, 255, 1)">var</span> data =<span style="color: rgba(0, 0, 0, 1)"> {
name: </span>"小明"<span style="color: rgba(0, 0, 0, 1)">,
age: </span>18<span style="color: rgba(0, 0, 0, 1)">
};
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> {
props: {
    fatherMsg: {
      type: String
    }
},
mixins: ,
components: {
    MenuBar
},
data() {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
      msg: </span>""<span style="color: rgba(0, 0, 0, 1)">,
      count: </span>0<span style="color: rgba(0, 0, 0, 1)">,
      watchMsg: </span>""<span style="color: rgba(0, 0, 0, 1)">,
      stickyList: []
    };
},
created() {
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.msg = data.name + data.age + "岁"<span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.stickyList = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.$store.state.onlySticky;
},
mounted() {
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 页面内部使用路由守卫</span>
    <span style="color: rgba(0, 0, 255, 1)">this</span>.$router.beforeEach((to, from, next) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(</span>"我要去" +<span style="color: rgba(0, 0, 0, 1)"> from.name);
      next();
    });
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> axios请求</span>
    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 请求地址https://www.foobar.com/my-app/user/add</span>
    const url1 = "https://www.foobar.com/my-app/user/add"<span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.$axios.get(url1, { params: { type: "js" } }).then(res =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res);
    });
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使用代理</span>
    const url2 = "/my-app/user/add"<span style="color: rgba(0, 0, 0, 1)">;
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.$axios.get(url2, { params: { type: "Ts" } }).then(res =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res);
    });
},
watch: {
    countChange: {
      handler(newVal, oldVal) {
      </span><span style="color: rgba(0, 0, 255, 1)">if</span> (newVal &lt; 5<span style="color: rgba(0, 0, 0, 1)">) {
          </span><span style="color: rgba(0, 0, 255, 1)">this</span>.watchMsg = "我是数字" +<span style="color: rgba(0, 0, 0, 1)"> newVal;
      } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
          </span><span style="color: rgba(0, 0, 255, 1)">this</span>.watchMsg = "我会继续增长"<span style="color: rgba(0, 0, 0, 1)">;
      }
      },
      immediate: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
    },
    watchMsg: {
      handler(newVal, oldVal) {
      console.log(newVal);
      },
      immediate: </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
    }
},
computed: {
    countChange: {
      get() {
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.count;
      },
      set(val) {
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.count = val + 2<span style="color: rgba(0, 0, 0, 1)">;
      }
    }
},
methods: {
    ...mapMutations([</span>"SHOW_EDIT"<span style="color: rgba(0, 0, 0, 1)">]),
    showEdit(item) {
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.$store.commit("SHOW_EDIT"<span style="color: rgba(0, 0, 0, 1)">, item);
    },
    addCcountChange() {
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span>.countChange++<span style="color: rgba(0, 0, 0, 1)">;
    },
    addCount() {
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span>.count++<span style="color: rgba(0, 0, 0, 1)">;
    }
}
};
</span>&lt;/script&gt;</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<h2 data-id="heading-31">demo-上述代码用Ts书写vue</h2>
<div class="cnblogs_code"><img id="code_img_closed_b63a758c-4202-4cd2-8123-58437b91392b" class="code_img_closed lazyload" data-src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_b63a758c-4202-4cd2-8123-58437b91392b" class="code_img_opened lazyload" style="display: none" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_b63a758c-4202-4cd2-8123-58437b91392b" class="cnblogs_code_hide">
<pre>&lt;template&gt;
&lt;div class="hello"&gt;
    &lt;MenuBar /&gt;
    &lt;router-link :to="{path:'learn'}"&gt;测试路由守卫--&gt;去learn&lt;/router-link&gt;
    &lt;h1&gt;{{handleReset("测试mixins111")}}&lt;/h1&gt;
    &lt;h1&gt;{{msg}}&lt;/h1&gt;
    &lt;h1&gt;{{fatherMsg}}&lt;/h1&gt;
    &lt;h1&gt;计算属性:{{countChange}},结果+2:{{watchMsg}}&lt;/h1&gt;
    &lt;button class="btn" @click="addCcountChange"&gt;计算属性:add&lt;/button&gt;
    &lt;h1&gt;监听:{{count}},结果+1:{{watchMsg}}&lt;/h1&gt;
    &lt;button class="btn" @click="addCount"&gt;监听add&lt;/button&gt;
    &lt;button @click="showEdit('vuex')"&gt;测试vuex&lt;/button&gt;
&lt;/div&gt;
&lt;/template&gt;

&lt;!-- 使用ts书写js --&gt;
&lt;script lang="ts"&gt;<span style="color: rgba(0, 0, 0, 1)">
import router from </span>"../router"<span style="color: rgba(0, 0, 0, 1)">;
import { Component, Prop, Vue, Watch, Mixins } from </span>"vue-property-decorator"<span style="color: rgba(0, 0, 0, 1)">;
import MenuBar from </span>"../components/MenuBar.vue"<span style="color: rgba(0, 0, 0, 1)">;
import TestMixins from </span>"../assets/mixin"<span style="color: rgba(0, 0, 0, 1)">;
import ItemData from </span>"../model/ItemData"; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">导入类</span>
import axios from "axios"<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 0, 255, 1)">var</span> data =<span style="color: rgba(0, 0, 0, 1)"> {
name: </span>"小明"<span style="color: rgba(0, 0, 0, 1)">,
age: </span>18<span style="color: rgba(0, 0, 0, 1)">
};
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 组件</span>
<span style="color: rgba(0, 0, 0, 1)">@Component({
components: {
    MenuBar
},
mixins:
})
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class Home extends Vue {
@Prop() private fatherMsg</span>!<span style="color: rgba(0, 0, 0, 1)">: string;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   挂载值</span>
public msg!: number |<span style="color: rgba(0, 0, 0, 1)"> string;
public count: number </span>= 0<span style="color: rgba(0, 0, 0, 1)">;
public watchMsg: string </span>= "开始"<span style="color: rgba(0, 0, 0, 1)">;
stickyList: </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.$store.state.onlySticky;
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   声明周期</span>
created(): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {
    console.log(</span>"created"<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.msg = data.name + data.age + "岁"<span style="color: rgba(0, 0, 0, 1)">;

    const url1 </span>= "https://www.foobar.com/my-app/user/add"<span style="color: rgba(0, 0, 0, 1)">;
    axios.get(url1, { params: { type: </span>"js" } }).then((res: any) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res);
    });
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 使用vue代理</span>
    const url2 = "/my-app/user/add"<span style="color: rgba(0, 0, 0, 1)">;
    axios.get(url2, { params: { type: </span>"Ts" } }).then((res: any) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res);
    });
}
beforeCreate() {
    console.log(</span>"beforecreate"<span style="color: rgba(0, 0, 0, 1)">);
}

beforeMount() {
    console.log(</span>"beforemounted"<span style="color: rgba(0, 0, 0, 1)">);
}
mounted() {
    console.log(</span>"mounted"<span style="color: rgba(0, 0, 0, 1)">);
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 页面内部使用路由守卫</span>
    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> router.beforeEach((to, from, next) =&gt; {</span>
    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   console.log("我来自" + from.name);</span>
    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   next();</span>
    <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> });</span>
<span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 进入路由触发</span>
beforeRouteEnter(to: any, from: any, next: () =&gt; <span style="color: rgba(0, 0, 255, 1)">void</span>): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {
    console.log(</span>"beforeRouteEnter111"<span style="color: rgba(0, 0, 0, 1)">);
    console.log(to.path);
    next();
}

beforeRouteUpdate(to: any, from: any, next: () </span>=&gt; <span style="color: rgba(0, 0, 255, 1)">void</span>): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {
    console.log(</span>"beforeRouteUpdate111"<span style="color: rgba(0, 0, 0, 1)">);
    next();
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 离开路由触发</span>
beforeRouteLeave(to: any, from: any, next: () =&gt; <span style="color: rgba(0, 0, 255, 1)">void</span>): <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> {
    console.log(</span>"beforeRouteLeave111"<span style="color: rgba(0, 0, 0, 1)">);
    next();
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   计算属性</span>
<span style="color: rgba(0, 0, 0, 1)">get countChange(): number {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.count;
}
set countChange(val) {
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.count = val + 1<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   监听</span>
@Watch("count"<span style="color: rgba(0, 0, 0, 1)">)
Count(newVal: number) {
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (newVal &lt; 10<span style="color: rgba(0, 0, 0, 1)">) {
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.watchMsg = "我是数字" +<span style="color: rgba(0, 0, 0, 1)"> newVal;
    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.watchMsg = "我会继续增长"<span style="color: rgba(0, 0, 0, 1)">;
    }
}
@Watch(</span>"watchMsg"<span style="color: rgba(0, 0, 0, 1)">)
clgMsg(newVal: string) {
    console.log(newVal);
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">   方法</span>
<span style="color: rgba(0, 0, 0, 1)">addCcountChange(): number {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span>.countChange++<span style="color: rgba(0, 0, 0, 1)">;
}
addCount(): number {
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span>.count++<span style="color: rgba(0, 0, 0, 1)">;
}
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> vuex</span>
<span style="color: rgba(0, 0, 0, 1)">showEdit(item) {
    </span><span style="color: rgba(0, 0, 255, 1)">this</span>.$store.commit("SHOW_EDIT"<span style="color: rgba(0, 0, 0, 1)">, item);
}
}
</span>&lt;/script&gt;


&lt;!-- Add "scoped" attribute to limit CSS to <span style="color: rgba(0, 0, 255, 1)">this</span> component only --&gt;
&lt;style scoped lang="less"&gt;<span style="color: rgba(0, 0, 0, 1)">
h3 {
margin: 40px </span>0 0<span style="color: rgba(0, 0, 0, 1)">;
}
ul {
list</span>-style-<span style="color: rgba(0, 0, 0, 1)">type: none;
padding: </span>0<span style="color: rgba(0, 0, 0, 1)">;
}
li {
display: inline</span>-<span style="color: rgba(0, 0, 0, 1)">block;
margin: </span>0<span style="color: rgba(0, 0, 0, 1)"> 10px;
}
a {
color: #42b983;
}
</span>&lt;/style&gt;</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>&nbsp;</p>
<h2>总结</h2>
<p>还是以vue2.0的版本为主的,后面在看看vue3 的写法 ,其实也差不多吧,用法 继续折腾吧 少年</p>
</div>
</div>
</div>
</div>
</div><br><br>
来源:https://www.cnblogs.com/yf-html/p/13723268.html
頁: [1]
查看完整版本: vue如何使用TypeScript语法