美文网首页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