vuex example02

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title> x</title>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> 
<link href="https://cdn.jsdelivr.net/npm/[email protected]" rel="stylesheet" type="text/css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/velocity/1.2.3/velocity.min.js"></script>
<!--
<script   src="C:\Users\SDSC-XAD\node_modules\vuex\dist\vuex.js" />
<script   src="https://unpkg.com/[email protected]" ></script>
-->
<script   src="https://unpkg.com/[email protected]" ></script>

 <!-- 
 參考自  https://www.cnblogs.com/first-time/p/6815036.html
 -->

</head>
<body>
    <h1>vuex</h1>
     <h2>  使用簡單例子</h2>
    <hr>
  
    
    <div id="example-2">
  <button @click="show = !show">Toggle show</button>
  <transition name="bounce" :duration="{ enter: 2000, leave: 1000 }">
    <p v-if="show">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris facilisis enim libero, at lacinia diam fermentum id. Pellentesque habitant morbi tristique senectus et netus.</p>
  </transition>
  
  <abc></abc>
</div>
     
    <script type="text/javascript">
    
     //import Vue from'Vuex' 
     //    Vue.use(Vuex);
 
 
 var myStore =  new Vuex.Store({
        state:{
            //存放組件之間共享的數據
            name:"www",
            age:28,
            nums:0
        },
         mutations:{
             //顯式的更改state裏的數據
             change:function(state,a){
                //  state.num++;
               console.log(state.nums += a); 
               
             },
             changeAsync :function(state,a){
                //  state.num++;
               console.log(state.nums += a); 
               
             }
         },
         getters:{
             getAge:function(state){
             var s="too young"
                 if(state.age<=28){
                  return s;
                 }
                // return state.age;
             }
         },
         actions:{
             //設置延時
             add:function(context,value){
                 setTimeout(function(){
           //提交事件
                    context.commit('changeAsync',value);
                 },1000)
                 
             }
         }
    });
      
 
   
  
  Vue.component('abc',{
 
        template:`
                <div>
                    <p @click='changeNum'>姓名:{{abcname}} 年齡:{{age}} 次數:{{nums}}</p>
                    <button @click='changeNumAnsyc'>change</button>
                </div>`,         
         
         mounted:function(){
            console.log(this)
        },
        computed: {
            abcname:function(){
                //return this.$myStore.state.name
                return this.$store.state.name
            },
            age:function(){
                 //return this.$store.state.age
                 //使用getters
                 return this.$store.getters.getAge 
            },
            nums:function(){
                 //return this.$store.state.age
                 //使用getters
                 return this.$store.state.nums 
            }
        },
         methods: {
            changeNum: function(){
                //在組件裏提交
                // this.num++;
                this.$store.commit('change',1)
            },
            //在組件裏派發事件 當點擊按鈕時,changeNumAnsyc觸發-->actions裏的add函數被觸發-->mutations裏的changeAsync函數觸發


            changeNumAnsyc:function(){
                this.$store.dispatch('add', 5);
            }
        },
    })
     
   
        new Vue({
          el: '#example-2',
          data: {
            show: true             
          },
         store:myStore,
        })
        
          
     
    </script>
</body>
</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章