美文网首页Vue.js学习
VUEX学习笔记(1)-实现计算器(附最详注释)

VUEX学习笔记(1)-实现计算器(附最详注释)

作者: woow_wu7 | 来源:发表于2017-06-23 13:51 被阅读37次
    知识点:
    • css之nth-child(),first-child(),last-child()
    例子:nth-child(2){background:#fff} 把父元素的第二个子元素的背景设置为白色;
           first-child():选择父元素的首个子元素
           last-child():选择父元素的最后一个子元素
    
    • eval()
    eval()函数可以计算字符串,并执行javascript代码
    例子:eval("2+3")  // 返回 5
    
    • vuex建立store仓库
    const store = new Vuex.Store( { 
     state: { 
      result: ' ';
      enter: ' '
    },
    mutations: {  //相当于vue实例中的computed计算属性
    },
    getters: {
    },
    actions: {
    },
    modules:{
    }
    } );
    
    • this.$store 获取store仓库中的数据
    例子:this.$store.state.result    获取state中的常量result的值
    
    • this.$store.commit(‘calculate',value)
     提交一个名为calculate的mutation给store仓库,并将参数一起提交过去。
    
    • vue组件样式
    component('组件名',{ template:`里面写模板的内容`,    // 引用组件:<组件名></组件名>
    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 获得触发事件的元素:
    <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>
    输出结果为:The id of the triggered element:p1
    
    计算器.jpg

    计算器实现

    <!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变量用来存  结果
                    enter: ' '    // enter变量用来存  输入的值
                },
                mutations: {
                    calculate(state, value) {
                        if(value === '='){
                            state.result = eval(state.enter); 
                            //eval() 函数可计算某个字符串,并执行其中的的 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值作为参数传给click事件;
                methods: {
                    getkeybordvalue(value) {
                        var value = value;
                        this.$store.commit('calculate',value);
                        // 在Vuex中不能任意修改应用层的状态,要修改,就得用它提供的唯一途径:通过commit提交mutations。
                    }
                }
            });
    
            //实例化vue
            new Vue({     
                el:"#app" ,  //挂载点
                data:{
                    keys: [
                        'clear','+','-','*',
                        '7','8','9','/',
                        '4','5','6','0',
                        '1','2','3','='
                    ]
                },
                store,
                computed: {   // 计算属性
                    result() {
                        return this.$store.state.result;  
                        //this指向的是实例化中的store
                        //this.$store.state.resule访问vuex中store仓库中的state中的常量;
                    },
                    enter() {
                        return this.$store.state.enter;
                    }
                }
            });
            
        </script>
    </body>
    </html>
    

    相关文章

      网友评论

        本文标题:VUEX学习笔记(1)-实现计算器(附最详注释)

        本文链接:https://www.haomeiwen.com/subject/igkccxtx.html