Vue基础语法01
一、模板語(yǔ)法
1.插值
文本
?{{msg}}
?示例:
<html>
?? ?<head>
?? ??? ?<meta charset="utf-8" />
?? ??? ?<title></title>
?? ??? ?<!-- 方式一 手動(dòng)方式 -->
?? ??? ?<!-- <script src="js/vue.js" type="text/javascript"></script> -->
?? ??? ?<!-- 方式二 CDN -->
?? ??? ?<!-- 開發(fā)環(huán)境版本,包含了有幫助的命令行警告 -->
?? ??? ?<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
?? ?</head>
?? ?<body>
?? ??? ?<div id="zhq">
?? ??? ??? ?<h1>{{ts}}</h1>
?? ??? ??? ?<h2>插值</h2>
?? ??? ??? ?<ol>
?? ??? ??? ??? ?<li>文本</li>
?? ??? ??? ??? ?<span>
?? ??? ??? ??? ??? ?{{msg}}
?? ??? ??? ??? ?</span>
?? ??? ??? ?</ol>
?? ??? ?</div>
?? ?</body>
?? ?<script>
?? ??? ?// 每個(gè)Vue應(yīng)用都是通過用Vue構(gòu)造器創(chuàng)建一個(gè)新的Vue實(shí)例開始的
?? ??? ?var vm=new Vue({
?? ??? ??? ?el:'#zhq', ? ? ? ? ? ??
?? ??? ??? ?data:function(){
?? ??? ??? ??? ?return{
?? ??? ??? ??? ??? ?msg:'Hello vue',
?? ??? ??? ??? ??? ?ts:new Date().getTime(),
?? ??? ??? ??? ?}
?? ??? ??? ?},
?? ??? ??? ?methods:{
?? ??? ??? ??? ?
?? ??? ??? ?}
?? ??? ?})
?? ?</script>
</html>
錯(cuò)誤示范:
<!-- !!!錯(cuò)誤示范!!! -->
<h1 title="{{msg}}"></h1>
html
?使用v-html指令用于輸出html代碼
示例:
<html>
?? ?<head>
?? ??? ?<meta charset="utf-8" />
?? ??? ?<title></title>
?? ??? ?<!-- 方式一 手動(dòng)方式 -->
?? ??? ?<!-- <script src="js/vue.js" type="text/javascript"></script> -->
?? ??? ?<!-- 方式二 CDN -->
?? ??? ?<!-- 開發(fā)環(huán)境版本,包含了有幫助的命令行警告 -->
?? ??? ?<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
?? ?</head>
?? ?<style>
?? ??? ?.cl{
?? ??? ??? ?color: pink;
?? ??? ?}
?? ?</style>
?? ?<body>
?? ??? ?<div id="zhq">
?? ??? ??? ?<h1>{{title}}</h1>
?? ??? ??? ?<h2>插值</h2>
?? ??? ??? ?<ol>
?? ??? ??? ??? ?<li>文本</li>
?? ??? ??? ??? ?<span>
?? ??? ??? ??? ??? ?{{msg}}
?? ??? ??? ??? ?</span>
?? ??? ??? ??? ?
?? ??? ??? ??? ?<li>html</li>
?? ??? ??? ??? ?<span v-html="html"></span>
?? ??? ??? ?</ol>
?? ??? ?</div>
?? ?</body>
?? ?<script>
?? ??? ?// 每個(gè)Vue應(yīng)用都是通過用Vue構(gòu)造器創(chuàng)建一個(gè)新的Vue實(shí)例開始的
?? ??? ?var vm=new Vue({
?? ??? ??? ?el:'#zhq', ? ? ? ? ? ??
?? ??? ??? ?data:function(){
?? ??? ??? ??? ?return{
?? ??? ??? ??? ??? ?msg:'Hello vue',
?? ??? ??? ??? ??? ?ts:new Date().getTime(),
?? ??? ??? ??? ??? ?html:'<input type="text" value="2"/>',
?? ??? ??? ??? ?}
?? ??? ??? ?},
?? ??? ??? ?methods:{
?? ??? ??? ??? ?
?? ??? ??? ?}
?? ??? ?})
?? ?</script>
</html>
屬性
HTML屬性中的值應(yīng)使用v-bind指令?
示例:
<html>
?? ?<head>
?? ??? ?<meta charset="utf-8" />
?? ??? ?<title></title>
?? ??? ?<!-- 方式一 手動(dòng)方式 -->
?? ??? ?<!-- <script src="js/vue.js" type="text/javascript"></script> -->
?? ??? ?<!-- 方式二 CDN -->
?? ??? ?<!-- 開發(fā)環(huán)境版本,包含了有幫助的命令行警告 -->
?? ??? ?<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
?? ?</head>
?? ?<style>
?? ??? ?.cl{
?? ??? ??? ?color: pink;
?? ??? ?}
?? ?</style>
?? ?<body>
?? ??? ?<div id="zhq">
?? ??? ??? ?<h1>{{title}}</h1>
?? ??? ??? ?<h2>插值</h2>
?? ??? ??? ?<ol>
?? ??? ??? ??? ?<li>文本</li>
?? ??? ??? ??? ?<span>
?? ??? ??? ??? ??? ?{{msg}}
?? ??? ??? ??? ?</span>
?? ??? ??? ??? ?
?? ??? ??? ??? ?<li>html</li>
?? ??? ??? ??? ?<span v-html="html"></span>
?? ??? ??? ??? ?
?? ??? ??? ??? ?<!--?
?? ??? ??? ??? ? 1.v-model:數(shù)據(jù)雙向綁定
?? ??? ??? ??? ? 2.v-biand:綁定標(biāo)簽屬性值 ?例:v-bind:css ?v-bind:id
?? ??? ??? ??? ? 3.{{}}:插值,針對(duì)標(biāo)簽中的文本值進(jìn)行操作
?? ??? ??? ??? ? -->
?? ??? ??? ??? ?<li>v-bind綁值</li>
?? ??? ??? ??? ?<span v-bind:class="cls" v-bind:id="123">
?? ??? ??? ??? ??? ?我變色了
?? ??? ??? ??? ?</span>
?? ??? ??? ?</ol>
?? ??? ?</div>
?? ?</body>
?? ?<script>
?? ??? ?// 每個(gè)Vue應(yīng)用都是通過用Vue構(gòu)造器創(chuàng)建一個(gè)新的Vue實(shí)例開始的
?? ??? ?var vm=new Vue({
?? ??? ??? ?el:'#zhq', ? ? ? ? ? ??
?? ??? ??? ?data:function(){
?? ??? ??? ??? ?return{
?? ??? ??? ??? ??? ?msg:'Hello vue',
?? ??? ??? ??? ??? ?ts:new Date().getTime(),
?? ??? ??? ??? ??? ?html:'<input type="text" value="2"/>',
?? ??? ??? ??? ??? ?cls:'cl',
?? ??? ??? ??? ?}
?? ??? ??? ?},
?? ??? ??? ?methods:{
?? ??? ??? ??? ?
?? ??? ??? ?}
?? ??? ?})
?? ?</script>
</html>
我們?cè)谕饷娼ocl定義了一個(gè)樣式,然后用v-bind給span標(biāo)簽綁定class,span中的內(nèi)容也變色了。
又用v-bind給它綁了一個(gè)id為123,在前端控制臺(tái)也能很清楚的看到
表達(dá)式
Vue提供了完全的JavaScript表達(dá)式支持
示例:
<!DOCTYPE html>
<html>
?? ?<head>
?? ??? ?<meta charset="utf-8" />
?? ??? ?<title></title>
?? ??? ?<!-- 方式一 手動(dòng)方式 -->
?? ??? ?<!-- <script src="js/vue.js" type="text/javascript"></script> -->
?? ??? ?<!-- 方式二 CDN -->
?? ??? ?<!-- 開發(fā)環(huán)境版本,包含了有幫助的命令行警告 -->
?? ??? ?<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
?? ?</head>
?? ?<style>
?? ??? ?.cl{
?? ??? ??? ?color: pink;
?? ??? ?}
?? ?</style>
?? ?<body>
?? ??? ?<div id="zhq">
?? ??? ??? ?<h1>{{ts}}</h1>
?? ??? ??? ?<h2>插值</h2>
?? ??? ??? ?<ol>
?? ??? ??? ??? ?<li>文本</li>
?? ??? ??? ??? ?<span>
?? ??? ??? ??? ??? ?{{msg}}
?? ??? ??? ??? ?</span>
?? ??? ??? ??? ?
?? ??? ??? ??? ?<li>html</li>
?? ??? ??? ??? ?<span v-html="html"></span>
?? ??? ??? ??? ?
?? ??? ??? ??? ?<!--?
?? ??? ??? ??? ? 1.v-model:數(shù)據(jù)雙向綁定
?? ??? ??? ??? ? 2.v-biand:綁定標(biāo)簽屬性值 ?例:v-bind:css ?v-bind:id
?? ??? ??? ??? ? 3.{{}}:插值,針對(duì)標(biāo)簽中的文本值進(jìn)行操作
?? ??? ??? ??? ? -->
?? ??? ??? ??? ?<li>v-bind綁值</li>
?? ??? ??? ??? ?<span v-bind:class="cls" v-bind:id="123">
?? ??? ??? ??? ??? ?我變色了
?? ??? ??? ??? ?</span>
?? ??? ??? ??? ?
?? ??? ??? ??? ?<li>表達(dá)式</li>
?? ??? ??? ??? ?<span>
?? ??? ??? ??? ??? ?{{msg.substr(0,6).toUpperCase()}}<br />
?? ??? ??? ??? ??? ?{{ number + 1 }}<br />
?? ??? ??? ??? ??? ?{{ ok ? 'YES' : 'NO' }}
?? ??? ??? ??? ??? ?<li v-bind:id="'list-' + id">我的Id是js動(dòng)態(tài)生成的</li>
?? ??? ??? ??? ?</span>
?? ??? ??? ??? ?
?? ??? ??? ?</ol>
?? ??? ?</div>
?? ?</body>
?? ?<script>
?? ??? ?// 每個(gè)Vue應(yīng)用都是通過用Vue構(gòu)造器創(chuàng)建一個(gè)新的Vue實(shí)例開始的
?? ??? ?var vm=new Vue({
?? ??? ??? ?el:'#zhq', ? ? ? ? ? ??
?? ??? ??? ?data:function(){
?? ??? ??? ??? ?return{
?? ??? ??? ??? ??? ?msg:'Hello vue',
?? ??? ??? ??? ??? ?ts:new Date().getTime(),
?? ??? ??? ??? ??? ?html:'<input type="text" value="2"/>',
?? ??? ??? ??? ??? ?cls:'cl',
?? ??? ??? ??? ??? ?number:1,
?? ??? ??? ??? ??? ?ok:true,
?? ??? ??? ??? ??? ?id:22,
?? ??? ??? ??? ?}
?? ??? ??? ?},
?? ??? ??? ?
?? ??? ??? ?methods:{
?
?? ??? ??? ?}
?? ??? ?})
?? ?</script>
</html>
?同樣也可以支持JavaScript表達(dá)式
第一個(gè):截取(0,6)然后大寫
第二個(gè):加法運(yùn)算
第三個(gè):三元運(yùn)算符
指令
指的是帶有“v-”前綴的特殊屬性
核心指令
v-if/v-else/v-else-if
代碼:
<html>
?? ?<head>
?? ??? ?<meta charset="utf-8" />
?? ??? ?<title></title>
?? ??? ?<!-- 方式一 手動(dòng)方式 -->
?? ??? ?<!-- <script src="js/vue.js" type="text/javascript"></script> -->
?? ??? ?<!-- 方式二 CDN -->
?? ??? ?<!-- 開發(fā)環(huán)境版本,包含了有幫助的命令行警告 -->
?? ??? ?<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
?? ?</head>
?? ?<body>
?? ??? ?<div id="zhq">
?? ??? ??? ?<h1>{{title}}</h1>
?? ??? ??? ?<h2>指令</h2>
?? ??? ??? ?<ol>
?? ??? ??? ??? ?<li>v-if / v-else / v-else-if</li>
?? ??? ??? ??? ?<span v-if="sex=='boy'">
?? ??? ??? ??? ??? ?男的
?? ??? ??? ??? ?</span>
?? ??? ??? ??? ?<span v-else-if="sex=='girl'">
?? ??? ??? ??? ??? ?女的
?? ??? ??? ??? ?</span>
?? ??? ??? ??? ?<span v-else>
?? ??? ??? ??? ??? ?男的還是女的?
?? ??? ??? ??? ?</span>
? ? ? ? ? ? </ol>
?? ??? ?</div>
?? ?</body>
?? ?<script>
?? ??? ?// 每個(gè)Vue應(yīng)用都是通過用Vue構(gòu)造器創(chuàng)建一個(gè)新的Vue實(shí)例開始的
?? ??? ?var vm=new Vue({
?? ??? ??? ?el:'#zhq', ? ? ? ? ? ??
?? ??? ??? ?data:function(){
?? ??? ??? ??? ?return{
?? ??? ??? ??? ??? ?ts:new Date().getTime(),
?? ??? ??? ??? ??? ?sex:'gay',
?? ??? ??? ??? ?}
?? ??? ??? ?},
?? ??? ??? ?methods:{
?? ??? ??? ?}
?? ??? ?})
?? ?</script>
</html>
根據(jù)其后表達(dá)式的bool值進(jìn)行判斷是否渲染該元素
- 他們只能是兄弟元素
- v-else-if上一個(gè)兄弟元素必須是v-if
- v-else上一個(gè)兄弟元素必須是v-if或者是v-else-if
v-show
代碼:
<li>v-show和v-model</li>
<div>
?? ?<input type="checkbox" v-model="flag" />已閱讀該協(xié)議
?? ?<div v-show="flag">
?? ??? ??? ?嗨害,我出來(lái)了
?? ?</div>
</div>
?
<!-- 在data中定義一個(gè)flag -->
flag:false,
?
?與v-if類似,只是會(huì)渲染其身后表達(dá)式為false的元素,而且會(huì)給這樣的元素添加css代碼:style="display:none"
v-for
代碼:
?? ??? ?<div id="zhq">
?? ??? ??? ?<h1>{{title}}</h1>
?? ??? ??? ?<h2>指令</h2>
?? ??? ??? ?<ol>
?? ??? ??? ??? ?<li>v-if / v-else / v-else-if</li>
?? ??? ??? ??? ?<span v-if="sex=='boy'">
?? ??? ??? ??? ??? ?我是男的
?? ??? ??? ??? ?</span>
?? ??? ??? ??? ?<span v-else-if="sex=='girl'">
?? ??? ??? ??? ??? ?我是女的
?? ??? ??? ??? ?</span>
?? ??? ??? ??? ?<span v-else>
?? ??? ??? ??? ??? ?我是男的還是女的
?? ??? ??? ??? ?</span>
?? ??? ??? ??? ?
?? ??? ??? ??? ?<li>v-show和v-model</li>
?? ??? ??? ??? ?<div>
?? ??? ??? ??? ??? ?<input type="checkbox" v-model="flag" />已閱讀該協(xié)議
?? ??? ??? ??? ??? ?<div v-show="flag">
?? ??? ??? ??? ??? ??? ?嗨害,我出來(lái)了
?? ??? ??? ??? ??? ?</div>
?? ??? ??? ??? ?</div>
?? ??? ??? ??? ?
?? ??? ??? ??? ?<li>v-for/v-model/v-bind/{{}}</li>
?? ??? ??? ??? ?<div v-for="(d,i) in arrays">
?? ??? ??? ??? ??? ?i={{i}},d={ze8trgl8bvbq}
?? ??? ??? ??? ?</div>
?? ??? ?
?? ??? ??? ??? ?<div>
?? ??? ??? ??? ??? ?<select>
?? ??? ??? ??? ??? ??? ?<option value="">--請(qǐng)選擇--</option>
?? ??? ??? ??? ??? ??? ?<option v-for="d in depts" v-bind:value="d.id">
?? ??? ??? ??? ??? ??? ??? ?{{d.name}}
?? ??? ??? ??? ??? ??? ?</option>
?? ??? ??? ??? ??? ?</select>
?? ??? ??? ??? ?</div>
?
?? ??? ??? ??? ?<span v-for="a in depts">
?? ??? ??? ??? ??? ?<input type="checkbox" v-bind:value="a.id" v-model="dt"/>{{a.name}}
?? ??? ??? ??? ?</span><br />
?? ??? ??? ??? ?<span v-if="dt.length!=0">
?? ??? ??? ??? ??? ?{{dt}}
?? ??? ??? ??? ?</span>
?? ??? ??? ?</ol>
?? ??? ?</div>
?
?
?? ??? ??? ?data:function(){
?? ??? ??? ??? ?return{
?? ??? ??? ??? ??? ?ts:new Date().getTime(),
?? ??? ??? ??? ??? ?sex:'gay',
?? ??? ??? ??? ??? ?flag:false,
?? ??? ??? ??? ??? ?depts:[
?? ??? ??? ??? ??? ??? ?{id:1,name:'研發(fā)部'},
?? ??? ??? ??? ??? ??? ?{id:2,name:'調(diào)研部'},
?? ??? ??? ??? ??? ??? ?{id:3,name:'人事部'},
?? ??? ??? ??? ??? ??? ?{id:4,name:'客服部'}
?? ??? ??? ??? ??? ?],
?? ??? ??? ??? ??? ?dt:[],
?? ??? ??? ??? ??? ?arrays:[1,2,3,4,5],
?? ??? ??? ??? ?}
?? ??? ??? ?},
?
類似JS的遍歷
? ? ? ? ? ? ? ? ?遍歷數(shù)組: v-for="item in items", items是數(shù)組,item為數(shù)組中的數(shù)組元素
? ? ? ? ? ? ? ? ?遍歷對(duì)象: v-for="(value,key,index) in stu", value屬性值,key屬性名,index下標(biāo)
?
v-model
在Vue入門篇有講解
用來(lái)在 input、select、textarea、checkbox、radio 等表單控件元素上創(chuàng)建雙向數(shù)據(jù)綁定,根據(jù)表單上的值,自動(dòng)更新綁定的元素的值 ??
參數(shù)、動(dòng)態(tài)參數(shù)、簡(jiǎn)寫
代碼:
? ? ? ? ? ? <li>參數(shù)、動(dòng)態(tài)參數(shù)、簡(jiǎn)寫</li>
?? ??? ??? ??? ?<span>
?? ??? ??? ??? ??? ?<!-- <a href="http://www.baidu.com">百度</a><br /> -->
?? ??? ??? ??? ??? ?<a v-bind:[attrname]="url">百度</a><br />
?? ??? ??? ??? ??? ?<a v-on:[eventname]="doClick">點(diǎn)我</a><br />
?? ??? ??? ??? ??? ?<!-- 簡(jiǎn)寫 -->
?? ??? ??? ??? ??? ?<!--?
?? ??? ??? ??? ??? ? v-on:簡(jiǎn)寫變成@
?? ??? ??? ??? ??? ? v-bind:簡(jiǎn)寫變成:
?? ??? ??? ??? ??? ? -->
?? ??? ??? ??? ??? ?<a :href="url">百度</a><br />
?? ??? ??? ??? ??? ?<a @click="doClick">點(diǎn)我</a>
?? ??? ??? ??? ?</span>
?
? ? ? ? var vm=new Vue({
?? ??? ??? ?el:'#zhq', ? ? ? ? ? ??
?? ??? ??? ?data:function(){
?? ??? ??? ??? ?return{
?? ??? ??? ??? ??? ?ts:new Date().getTime(),
?? ??? ??? ??? ??? ?sex:'gay',
?? ??? ??? ??? ??? ?flag:false,
?? ??? ??? ??? ??? ?depts:[
?? ??? ??? ??? ??? ??? ?{id:1,name:'研發(fā)部'},
?? ??? ??? ??? ??? ??? ?{id:2,name:'調(diào)研部'},
?? ??? ??? ??? ??? ??? ?{id:3,name:'人事部'},
?? ??? ??? ??? ??? ??? ?{id:4,name:'客服部'}
?? ??? ??? ??? ??? ?],
?? ??? ??? ??? ??? ?dt:[],
?? ??? ??? ??? ??? ?arrays:[1,2,3,4,5],
?? ??? ??? ??? ??? ?url:'http://www.baidu.com',
?? ??? ??? ??? ??? ?attrname:'href',
?? ??? ??? ??? ??? ?eventname:'dblclick',
?? ??? ??? ??? ?}
?? ??? ??? ?},
?? ??? ??? ?
?? ??? ??? ?methods:{
?? ??? ??? ??? ?doClick(){
?? ??? ??? ??? ??? ?alert(111);
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?})
在這里href是參數(shù),告知v-bind指令將該元素的href屬性與表達(dá)式url的值綁定
注1:動(dòng)態(tài)參數(shù)表達(dá)式有一些語(yǔ)法約束,evName無(wú)效,evname有效,回避大寫
?
二、過濾器
全局過濾器
?
局部過濾器
? ?new Vue({filters:{'filterName':function(value){}}});vue允許你自定義過濾器,被用作一些常見的文本格式化,格式如下:
? ?<!-- 在兩個(gè)大括號(hào)中 -->
?
? ?<!-- 在 v-bind 指令中 -->
?
? ?注1:過濾器函數(shù)接受表達(dá)式的值作為第一個(gè)參數(shù)?
? ?注2:過濾器可以串聯(lián) ? ??
? ?
? ?注3:過濾器是JavaScript函數(shù),因此可以接受參數(shù):?
? ?
? ?注4:js定義一個(gè)類
? ?
案例
首字母大寫/日期格式化
<!DOCTYPE html>
<html>
?? ?<head>
?? ??? ?<meta charset="utf-8" />
?? ??? ?<title></title>
?? ??? ?<!-- 方式一 手動(dòng)方式 -->
?? ??? ?<!-- <script src="js/vue.js" type="text/javascript"></script> -->
?? ??? ?<!-- 方式二 CDN -->
?? ??? ?<!-- 開發(fā)環(huán)境版本,包含了有幫助的命令行警告 -->
?? ??? ?<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
?? ??? ?<script src="js/date.js" type="text/javascript"></script>
?? ?</head>
?? ?<body>
?? ??? ?<div id="zhq">
?? ??? ??? ?<h1>{{ts}}</h1>
?? ??? ??? ?<h2>過濾器(全局,局部)</h2>
?? ??? ??? ?<div>
?? ??? ??? ??? ?<!-- 局部過濾器 -->
?? ??? ??? ??? ?{{title|strFilter}}<br/>
?? ??? ??? ??? ?<!-- 全局過濾器 -->
?? ??? ??? ??? ?{{dt|dateFilter|strFilter}}
?? ??? ??? ?</div>
?? ??? ?</div>
?? ?</body>
?? ?<script>
?? ??? ?//全局過濾器
?? ??? ?Vue.filter('dateFilter',function(v){
?? ??? ??? ?return fmtDate(v,'yyyy年MM月dd日')
?? ??? ?});
?? ??? ?
?? ??? ?// 每個(gè)Vue應(yīng)用都是通過用Vue構(gòu)造器創(chuàng)建一個(gè)新的Vue實(shí)例開始的
?? ??? ?var vm=new Vue({
?? ??? ??? ?el:'#zhq', ? ? ? ? ? ??
?? ??? ??? ?data:function(){
?? ??? ??? ??? ?return{
?? ??? ??? ??? ??? ?ts:new Date().getTime(),
?? ??? ??? ??? ??? ?title:'hello vue!!',
?? ??? ??? ??? ??? ?dt:new Date(),
?? ??? ??? ??? ?}
?? ??? ??? ?},
?? ??? ??? ?
?? ??? ??? ?methods:{
?? ??? ??? ??? ?
?? ??? ??? ?},
?? ??? ??? ?//局部過濾器
?? ??? ??? ?filters:{
?? ??? ??? ??? ?strFilter:function(v){
?? ??? ??? ??? ??? ?return v.substr(0,6).toUpperCase();
?? ??? ??? ??? ?}
?? ??? ??? ?},
?? ??? ?})
?? ?</script>
</html>
三、計(jì)算屬性
? ?計(jì)算屬性可用于快速計(jì)算視圖(View)中顯示的屬性。這些計(jì)算將被緩存,并且只在需要時(shí)更新
案例
成績(jī)的總分
代碼:
<!DOCTYPE html>
<html>
?? ?<head>
?? ??? ?<meta charset="utf-8" />
?? ??? ?<title></title>
?? ??? ?<!-- 方式一 手動(dòng)方式 -->
?? ??? ?<!-- <script src="js/vue.js" type="text/javascript"></script> -->
?? ??? ?<!-- 方式二 CDN -->
?? ??? ?<!-- 開發(fā)環(huán)境版本,包含了有幫助的命令行警告 -->
?? ??? ?<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.0/vue.js"></script>
?? ??? ?<script src="js/date.js" type="text/javascript"></script>
?? ?</head>
?? ?<body>
?? ??? ?<div id="zhq">
?? ??? ??? ?<h1>{{ts}}</h1>
?? ??? ??? ?<h2>計(jì)算屬性</h2>
?? ??? ??? ??? ?<div v-for="s in score">
?? ??? ??? ??? ??? ?編號(hào)={{s.id}},科目={{s.name}},成績(jī)={{s.sc}}
?? ??? ??? ??? ?</div>
?? ??? ??? ??? ?<span >總分:{{sum}}</span>
?? ??? ?</div>
?? ?</body>
?? ?<script>
?? ??? ?// 每個(gè)Vue應(yīng)用都是通過用Vue構(gòu)造器創(chuàng)建一個(gè)新的Vue實(shí)例開始的
?? ??? ?var vm=new Vue({
?? ??? ??? ?el:'#zhq', ? ? ? ? ? ??
?? ??? ??? ?data:function(){
?? ??? ??? ??? ?return{
?? ??? ??? ??? ??? ?ts:new Date().getTime(),
?? ??? ??? ??? ??? ?score:[
?? ??? ??? ??? ??? ??? ?{id:1,name:'語(yǔ)文',sc:110},
?? ??? ??? ??? ??? ??? ?{id:2,name:'數(shù)學(xué)',sc:90},
?? ??? ??? ??? ??? ??? ?{id:3,name:'英語(yǔ)',sc:90},
?? ??? ??? ??? ??? ??? ?{id:4,name:'物理',sc:100}
?? ??? ??? ??? ??? ?],
?? ??? ??? ??? ?}
?? ??? ??? ?},
?? ??? ??? ?
?? ??? ??? ?methods:{
?? ??? ??? ??? ?
?? ??? ??? ?},
?? ??? ??? ?computed:{
?? ??? ??? ??? ?sum:function(){
?? ??? ??? ??? ??? ?let s=0;
?? ??? ??? ??? ??? ?for(let sc of this.score)
?? ??? ??? ??? ??? ??? ?s+=sc.sc;
?? ??? ??? ??? ??? ??? ?return s;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?});
?? ?</script>
</html>
?
小結(jié):計(jì)算屬性和監(jiān)聽屬性的區(qū)別
?自己的理解
computed用來(lái)監(jiān)控自己定義的變量,該變量不在data里面聲明,直接在computed里面定義,然后就可以在頁(yè)面上進(jìn)行雙向數(shù)據(jù)綁定展示出結(jié)果或者用作其他處理;
computed比較適合對(duì)多個(gè)變量或者對(duì)象進(jìn)行處理后返回一個(gè)結(jié)果值,也就是數(shù)多個(gè)變量中的某一個(gè)值發(fā)生了變化則我們監(jiān)控的這個(gè)值也就會(huì)發(fā)生變化,
舉例:購(gòu)物車?yán)锩娴纳唐妨斜砗涂偨痤~之間的關(guān)系,只要商品列表里面的商品數(shù)量發(fā)生變化,或減少或增多或刪除商品,總金額都應(yīng)該發(fā)生變化。這里的這個(gè)總金額使用computed屬性來(lái)進(jìn)行計(jì)算是最好的選擇?
? 與watch之間的區(qū)別:watch主要用于監(jiān)控vue實(shí)例的變化,它監(jiān)控的變量當(dāng)然必須在data里面聲明才可以,它可以監(jiān)控一個(gè)變量,也可以是一個(gè)對(duì)象
總結(jié)
- 上一篇: ik与拼音分词器,拓展热词/停止词库
- 下一篇: oracle中创建事件的作用,Oracl