VUEX學(xué)習(xí)筆記(1)-實(shí)現(xiàn)計(jì)算器(附最詳注釋)

知識點(diǎn):
  • css之nth-child(),first-child(),last-child()
例子:nth-child(2){background:#fff} 把父元素的第二個子元素的背景設(shè)置為白色;
       first-child():選擇父元素的首個子元素
       last-child():選擇父元素的最后一個子元素
  • eval()
eval()函數(shù)可以計(jì)算字符串,并執(zhí)行javascript代碼
例子:eval("2+3")  // 返回 5
  • vuex建立store倉庫
const store = new Vuex.Store( { 
 state: { 
  result: ' ';
  enter: ' '
},
mutations: {  //相當(dāng)于vue實(shí)例中的computed計(jì)算屬性
},
getters: {
},
actions: {
},
modules:{
}
} );
  • this.$store 獲取store倉庫中的數(shù)據(jù)
例子:this.$store.state.result    獲取state中的常量result的值
  • this.$store.commit(‘calculate',value)
 提交一個名為calculate的mutation給store倉庫,并將參數(shù)一起提交過去。
  • vue組件樣式
component('組件名',{ template:`里面寫模板的內(nèi)容`,    // 引用組件:<組件名></組件名>
data:{
},
computed:{
},
methods:{
},
filters:{
}
...
})
  • dataset 獲取某個data屬性中的值
例子:
html部分:
<div id="aa"  data-drink="coffee" data-food="sushi"  datameal="lunch">¥20.12</div>
javascript部分:
var m = document.getElementById("aa");  
var n = m.dataset.drink;    // 獲取data-drink屬性中的值,得到n的值為coffee
  • taget事件屬性
    event.target 獲得觸發(fā)事件的元素:
<html>
<head>
<script type="text/javascript">
function getEventTrigger(event)
  { 
  x=event.target; 
  alert("The id of the triggered element: " + x.id);
  }
</script>
</head>
<body >
<p id="p1" onmousedown="getEventTrigger(event)">
Click on this paragraph. An alert box will show which element triggered the event.</p>
</body>
</html>
輸出結(jié)果為:The id of the triggered element:p1
計(jì)算器.jpg

計(jì)算器實(shí)現(xiàn)

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8">
    <title></title>
</head>
<style type="text/css">
    #app{
        width: 400px;
        background:#FFE4E1;
    }
    .result{
        font-size: 30px;
        padding:60px;   
        text-align: right;
    }
    .enter{
        font-size: 20px;
        margin: 10px auto;
        padding:0  60px 20px 0; 
        text-align: right;
    }
    .template{
        background:#FFF8DC;
        width:100px;
        height:120px;
        display: inline-block;
        font-size: 30px;
        box-sizing: border-box;
        text-align: center;
        vertical-align: middle;
        line-height:120px;
        color:#7A378B;
    }
    .template:nth-child(1){
        color:red;
    }
    .template:last-child{
        background:#C6E2FF;
    }
</style>
<body>
    <div id="app">
        <div class="result">{{result}}</div>
        <div class="enter">{{enter}}</div>
        <div class="key">
            <div class="list">
                <keybord v-for="item in keys" v-bind:value="item"></keybord>
            </div>
        </div>
    </div>
    <script type="text/javascript" src="./vue.min.js"></script>
    <script type="text/javascript" src="./vuex.min.js"></script>
    <script type="text/javascript">
        //建立倉庫store
        const store = new Vuex.Store({  //這里注意V和S都要大寫
            state: {
                result: ' ',  //result變量用來存  結(jié)果
                enter: ' '    // enter變量用來存  輸入的值
            },
            mutations: {
                calculate(state, value) {
                    if(value === '='){
                        state.result = eval(state.enter); 
                        //eval() 函數(shù)可計(jì)算某個字符串,并執(zhí)行其中的的 JavaScript 代碼。
                    }else if(value === 'clear'){
                        state.result = state.enter =' ';
                    }else{
                        state.enter += value;
                    }
                }
            }
        });

        //建立keybord組件
        Vue.component('keybord',{
            props:['value'],   //從dom中的<keybord></keybord>組件中傳過來value屬性的值;
            template:
            `<div class="template" v-on:click="getkeybordvalue(value)"> {{value}} </div>`,
             // 把從父組件傳過來的value值作為參數(shù)傳給click事件;
            methods: {
                getkeybordvalue(value) {
                    var value = value;
                    this.$store.commit('calculate',value);
                    // 在Vuex中不能任意修改應(yīng)用層的狀態(tài),要修改,就得用它提供的唯一途徑:通過commit提交mutations。
                }
            }
        });

        //實(shí)例化vue
        new Vue({     
            el:"#app" ,  //掛載點(diǎn)
            data:{
                keys: [
                    'clear','+','-','*',
                    '7','8','9','/',
                    '4','5','6','0',
                    '1','2','3','='
                ]
            },
            store,
            computed: {   // 計(jì)算屬性
                result() {
                    return this.$store.state.result;  
                    //this指向的是實(shí)例化中的store
                    //this.$store.state.resule訪問vuex中store倉庫中的state中的常量;
                },
                enter() {
                    return this.$store.state.enter;
                }
            }
        });
        
    </script>
</body>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 夜風(fēng)裹挾著殘?jiān)?枯葉遙望著酣睡的烏鴉 螞蟻搬運(yùn)著腐尸 起伏的螢火蟲 燃燒豺狼狩獵的兇光 野貓輕踩枯葉 驚醒夢游的蝴...
    嘆墨閱讀 331評論 0 0
  • 這個桌子有點(diǎn)破,倒是和我現(xiàn)在蠻搭的。我現(xiàn)在形象是有點(diǎn)邋遢,很久沒有曬到太陽的皮膚是有點(diǎn)白的可怕,眼眶深陷,頭發(fā)...
    離艮巽閱讀 463評論 2 0
  • 開學(xué)近兩周了,課文也已經(jīng)學(xué)完了近兩單元,大部分課文,上課都是走老路,吃老本。甚至有些課文因?yàn)榭荚囘@個功利原因的驅(qū)使...
    四月的麥田閱讀 614評論 0 0
  • 會不會有一天四季全變成夏天,是不是這樣你才會相信有永遠(yuǎn)。 在廈門的這幾天,無意中聽到了這首愛夏,又回到了大學(xué)里第一...
    在人間仰望你閱讀 405評論 0 0
  • 第十一章 有多少機(jī)會? 這次很容易跟隨父親的邏輯了。為此,我要了解他的方向是什么。正如期望的,他通過探索另一方面更...
    發(fā)現(xiàn)好物閱讀 317評論 0 1

友情鏈接更多精彩內(nèi)容