• <center id="sm46c"></center>
  • <dfn id="sm46c"></dfn>
  • <strike id="sm46c"></strike>
  • <cite id="sm46c"><source id="sm46c"></source></cite>
    • <strike id="sm46c"><source id="sm46c"></source></strike>
      <option id="sm46c"></option>
      国产精品天天看天天狠,女高中生强奷系列在线播放,久久无码免费的a毛片大全,国产日韩综合av在线,亚洲国产中文综合专区在,特殊重囗味sm在线观看无码,中文字幕一区二区三区四区在线,无码任你躁久久久久久老妇蜜桃

      vue傳值方式總結(jié) (十二種方法)

      2021-4-25    前端達(dá)人

      一.父傳子傳遞

      (1)在父組件的子組件標(biāo)簽上綁定一個屬性,掛載要傳輸?shù)淖兞?br style="box-sizing:border-box;outline:0px;user-select:text !important;overflow-wrap:break-word;" /> (2)在子組件中通過props來接受數(shù)據(jù),props可以是數(shù)組也可以是對象,接受的數(shù)據(jù)可以直接使用 props: [“屬性 名”] props:{屬性名:數(shù)據(jù)類型}
      代碼示例:

      //父組件
      <template>
        <div>
          <i>父組件</i>
          <!--頁面使用-->
          <son :data='name'></son> 
        </div>
      </template>
      
      <script>
      import son from "./son.vue";//導(dǎo)入父組件
      export default {
        components: { son },//注冊組件
        name: "父組件",
        data() {
          return {
            name: "Frazier", //父組件定義變量
          };
        },
      };
      </script> 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      //子組件
      <template>
        <div>{{data}}</div>
      </template>
      
      <script>
      export default {
      components: { },
        name: '子組件',
        props:["data"],
      };
      </script> 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12

      二.子傳父傳遞

      (1)在父組件的子組件標(biāo)簽上自定義一個事件,然后調(diào)用需要的方法
      (2)在子組件的方法中通過 this.$emit(“事件”)來觸發(fā)在父組件中定義的事件,數(shù)據(jù)是以參數(shù)的形式進(jìn)行傳遞的
      代碼示例:

      //父組件
      <template>
        <div>
          <i>父組件</i>
          <!--頁面使用-->
          <son @lcclick="lcclick"></son>//自定義一個事件
        </div>
      </template>
      
      <script>
      import son from "./son.vue"; //導(dǎo)入父組件
      export default {
        components: { son }, //注冊組件
        name: "父組件",
        data() {
          return {};
        },
        methods: {
          lcclick(){
            alert('子傳父')
          }
        },
      };
      </script> 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      //子組件
      <template>
        <div>
          <button @click="lcalter">點我</button>
        </div>
      </template>
      
      <script>
      export default {
      components: { },
        name: '子組件',
        methods: {
          lcalter(){
            this.$emit('lcclick')//通過emit來觸發(fā)事件
          }
        },
      };
      </script> 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18

      三.兄弟組件通信(bus總線)

      (1)在src中新建一個Bus.js的文件,然后導(dǎo)出一個空的vue實例
      (2)在傳輸數(shù)據(jù)的一方引入Bus.js 然后通過Bus.e m i t ( “ 事 件 名 ” , " 參 數(shù) " ) 來 來 派 發(fā) 事 件 , 數(shù) 據(jù) 是 以 emit(“事件名”,"參數(shù)")來來派發(fā)事件,數(shù)據(jù)是以emit(,"數(shù)")發(fā)數(shù)據(jù)emit()的參 數(shù)形式來傳遞
      (3)在接受的數(shù)據(jù)的一方 引入 Bus.js 然后通過 Bus.$on(“事件名”,(data)=>{data是接受的數(shù)據(jù)})
      圖片示例:
      在這里插入圖片描述
      在這里插入圖片描述
      在這里插入圖片描述

      四.ref/refs(父子組件通信)

      (1)ref 如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;如果用在子組件上,引用就指向組件實例,
      (2)可以通過實例直接調(diào)用組件的方法或訪問數(shù)據(jù)。也算是子組件向父組件傳值的一種
      代碼示例:

      //父組件
      <template>
        <div>
          <button @click="sayHello">sayHello</button>
          <child ref="childForRef"></child>
        </div>
      </template>
      <script>
      import child from './child.vue'
        export default {
          components: { child },
          data () {
            return {
              childForRef: null,
            }
          },
          mounted() {
            this.childForRef = this.$refs.childForRef;
            console.log(this.childForRef.name);
          },
          methods: {
            sayHello() {
              this.childForRef.sayHello()
            }
          }
        }
      </script> 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      //子組件
      <template>
        <div>child 的內(nèi)容</div>
      </template>
      <script>
      export default {
        data () {
          return {
            name: '我是 child',
          }
        },
        methods: {
          sayHello () {
            console.log('hello');
            alert('hello');
          }
        }
      }
      </script> 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19

      五.Vuex通信

      組件通過 dispatch 到 actions,actions 是異步操作,再 actions中通過 commit 到 mutations,mutations 再通過邏輯操作改變 state,從而同步到組件,更新其數(shù)據(jù)狀態(tài)
      代碼示例:

      //父組件
      template>
        <div id="app">
          <ChildA/>
          <ChildB/>
        </div>
      </template>
      <script>
        import ChildA from './ChildA' // 導(dǎo)入A組件
        import ChildB from './ChildB' // 導(dǎo)入B組件
        export default {
          components: {ChildA, ChildB} // 注冊組件
        }
      </script> 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      //子組件A
      <template>
       <div id="childA">
         <h1>我是A組件</h1>
         <button @click="transform">點我讓B組件接收到數(shù)據(jù)</button>
         <p>因為點了B,所以信息發(fā)生了變化:{{BMessage}}</p>
       </div>
      </template>
      <script>
       export default {
         data() {
           return {
             AMessage: 'Hello,B組件,我是A組件'
           }
         },
         computed: {
           BMessage() {
             // 這里存儲從store里獲取的B組件的數(shù)據(jù)
             return this.$store.state.BMsg
           }
         },
         methods: {
           transform() {
             // 觸發(fā)receiveAMsg,將A組件的數(shù)據(jù)存放到store里去
             this.$store.commit('receiveAMsg', {
               AMsg: this.AMessage
             })
           }
         }
       }
      </script> 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      //子組件B
      <template>
       <div id="childB">
         <h1>我是B組件</h1>
         <button @click="transform">點我讓A組件接收到數(shù)據(jù)</button>
         <p>點了A,我的信息發(fā)生了變化:{{AMessage}}</p>
       </div>
      </template>
      
      <script>
       export default {
         data() {
           return {
             BMessage: 'Hello,A組件,我是B組件'
           }
         },
         computed: {
           AMessage() {
             // 這里存儲從store里獲取的A組件的數(shù)據(jù)
             return this.$store.state.AMsg
           }
         },
         methods: {
           transform() {
             // 觸發(fā)receiveBMsg,將B組件的數(shù)據(jù)存放到store里去
             this.$store.commit('receiveBMsg', {
               BMsg: this.BMessage
             })
           }
         }
       }
      </script> 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      //vuex
      import Vue from 'vue'
       import Vuex from 'vuex'
       Vue.use(Vuex)
       const state = {
         AMsg: '',
         BMsg: ''
       }
      
       const mutations = {
         receiveAMsg(state, payload) {
           // 將A組件的數(shù)據(jù)存放于state
           state.AMsg = payload.AMsg
         },
         receiveBMsg(state, payload) {
           // 將B組件的數(shù)據(jù)存放于state
           state.BMsg = payload.BMsg
         }
       }
      
       export default new Vuex.Store({
         state,
         mutations
       }) 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25

      六.$parent

      通過parent可以獲父組件實例 ,然 后通過這個實例就可以訪問父組件的屬 性和方法 ,它還有一個兄弟parent可以獲父組件實例,然后通過這個實例就可以訪問父組件的屬性和方法,它還有一個兄弟parent可以獲父組件實例,然后通過這個實例就可以訪問父組件的屬性和方法,它還有一個兄弟root,可以獲取根組件實例。
      代碼示例:

      // 獲父組件的數(shù)據(jù)
      this.$parent.foo
      
      // 寫入父組件的數(shù)據(jù)
      this.$parent.foo = 2
      
      // 訪問父組件的計算屬性
      this.$parent.bar
      
      // 調(diào)用父組件的方法
      this.$parent.baz()
      
      //在子組件傳給父組件例子中,可以使用this.$parent.getNum(100)傳值給父組件。 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13

      七.sessionStorage傳值

      sessionStorage 是瀏覽器的全局對象,存在它里面的數(shù)據(jù)會在頁面關(guān)閉時清除 。運用這個特性,我們可以在所有頁面共享一份數(shù)據(jù)。
      代碼示例:

      // 保存數(shù)據(jù)到 sessionStorage
      sessionStorage.setItem('key', 'value');
      
      // 從 sessionStorage 獲取數(shù)據(jù)
      let data = sessionStorage.getItem('key');
      
      // 從 sessionStorage 刪除保存的數(shù)據(jù)
      sessionStorage.removeItem('key');
      
      // 從 sessionStorage 刪除所有保存的數(shù)據(jù)
      sessionStorage.clear(); 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11

      注意:里面存的是鍵值對,只能是字符串類型,如果要存對象的話,需要使用 let objStr = JSON.stringify(obj) 轉(zhuǎn)成字符串然后再存儲(使用的時候 let obj = JSON.parse(objStr) 解析為對象)。
      推薦一個庫 good-storage ,它封裝了sessionStorage ,可以直接用它的API存對象

      //localStorage
       storage.set(key,val) 
       storage.get(key, def)
      //sessionStorage
       storage.session.set(key, val)
       storage.session.get(key, val) 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      八.路由傳值

      使用問號傳值
      A頁面跳轉(zhuǎn)B頁面時使用 this.r o u t e r . p u s h ( ’ / B ? n a m e = d a n s e e k ’ ) B 頁 面 可 以 使 用 t h i s . router.push(’/B?name=danseek’) B頁面可以使用 this.router.push(/B?name=danseek)B使this.route.query.name 來獲取A頁面?zhèn)鬟^來的值
      上面要注意router和route的區(qū)別
      使用冒號傳值
      配置如下路由:

      {
          path: '/b/:name',
          name: 'b',
          component: () => import( '../views/B.vue')
       }, 
      
      • 1
      • 2
      • 3
      • 4
      • 5

      在B頁面可以通過 this.$route.params.name 來獲取路由傳入的name的值

      使用父子組件傳值
      由于router-view本身也是一個組件,所以我們也可以使用父子組件傳值方式傳值,然后在對應(yīng)的子頁面里加上props,因為type更新后沒有刷新路由,所以不能直接在子頁面的mounted鉤子里直接獲取最新type的值,而要使用watch

      <router-view :type="type"></router-view>
      
      // 子頁面
      props: ['type']
      watch: {
             type(){
                 // console.log("在這個方法可以時刻獲取最新的數(shù)據(jù):type=",this.type)
             },
      }, 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

      九.祖?zhèn)鲗O $attrs

      正常情況下需要借助父親的props作為中間過渡,但是這樣在父親組件就會多了一些跟父組件業(yè)務(wù)無關(guān)的屬性,耦合度高,借助$attrs可以簡化些,而且祖跟孫都無需做修改
      祖組件:

      <template>
          <section>
              <parent name="grandParent" sex="男" age="88" hobby="code" @sayKnow="sayKnow"></parent>
          </section>
      </template>
      
      <script>
          import Parent from './Parent'
          export default {
              name: "GrandParent",
              components: {
                Parent
              },
              data() {
                  return {}
              },
              methods: {
                sayKnow(val){
                  console.log(val)
                }
              },
              mounted() {
              }
          }
      </script> 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25

      父組件

      template>
        <section>
          <p>父組件收到</p>
          <p>祖父的名字:{{name}}</p>
          <children v-bind="$attrs" v-on="$listeners"></children>
        </section>
      </template>
      
      <script>
        import Children from './Children'
      
        export default {
          name: "Parent",
          components: {
            Children
          },
          // 父組件接收了name,所以name值是不會傳到子組件的
          props:['name'],
          data() {
            return {}
          },
          methods: {},
          mounted() {
          }
        }
      </script> 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26

      子組件

      <template>
        <section>
          <p>子組件收到</p>
          <p>祖父的名字:{{name}}</p>
          <p>祖父的性別:{{sex}}</p>
          <p>祖父的年齡:{{age}}</p>
          <p>祖父的愛好:{{hobby}}</p>
      
          <button @click="sayKnow">我知道啦</button>
        </section>
      </template>
      
      <script>
        export default {
          name: "Children",
          components: {},
          // 由于父組件已經(jīng)接收了name屬性,所以name不會傳到子組件了
          props:['sex','age','hobby','name'],
          data() {
            return {}
          },
          methods: {
            sayKnow(){
              this.$emit('sayKnow','我知道啦')
            }
          },
          mounted() {
          }
        }
      </script> 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31

      十.孫傳祖使用$listeners

      文字內(nèi)容同第九個

      祖組件

      <template>
        <div id="app">
          <children-one @eventOne="eventOne"></children-one>
          {{ msg }}
        </div>
      </template>
      <script>
      import ChildrenOne from '../src/components/children.vue'
      export default {
        name: 'App',
        components: {
          ChildrenOne,
        },
        data() {
          return {
            msg: ''
          }
        },
        methods: {
          eventOne(value) {
            this.msg = value
          }
        }
      }
      </script> 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25

      父組件

      <template>
        <div>
          <children-two v-on="$listeners"></children-two>
        </div>
      </template>
      
      <script>
      import ChildrenTwo from './childrenTwo.vue'
      
      export default {
        name: 'childrenOne',
        components: {
          ChildrenTwo
        }
      }
      </script> 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16

      子組件

      <template>
        <div>
          <button @click="setMsg">點擊傳給祖父</button>
        </div>
      </template>
      
      <script>
      export default {
        name: 'children',
        methods: {
          setMsg() {
            this.$emit('eventOne', '123')
          }
        }
      }
      </script> 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16

      十一.promise傳參

      promise 中 resolve 如何傳遞多個參數(shù)

      //類似與這樣使用,但實際上后面兩個參數(shù)無法獲取
      promise = new Promise((resolve,reject)=>{
          let a = 1
          let b = 2
          let c = 3
          resolve(a,b,c) 
      })
      promise.then((a,b,c)=>{
          console.log(a,b,c)
      }) 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10

      resolve() 只能接受并處理一個參數(shù),多余的參數(shù)會被忽略掉。
      如果想多個用數(shù)組,或者對象方式。。
      數(shù)組

      promise = new Promise((resolve,reject)=>{
          resolve([1,2,3]) 
      })
      promise.then((arr)=>{
          console.log(arr[0],arr[1],arr[2])
      }) 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      對象

      promise = new Promise((resolve,reject)=>{
          resolve({a:1,b:2,c:3}) 
      })
      promise.then(obj=>{
          console.log(obj.a,obj.b,obj.c)
      }) 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      十二.全局變量

      定義一個全局變量,在有值的組件直接賦值,在需要的組件內(nèi)直接使用就可以了。


      轉(zhuǎn)自:csdn 作者:Frazier_梁超


      藍(lán)藍(lán)設(shè)計www.li-bodun.cn )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標(biāo)定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 平面設(shè)計服務(wù)

      日歷

      鏈接

      個人資料

      存檔

      主站蜘蛛池模板: 五月综合激情婷婷六月| 国产成人无码午夜视频在线观看 | 精品视频在线观自拍自拍| 在线看高清中文字幕一区| 精品国产sm最大网免费站| 国产成人小视频| 亚洲成人av一区二区| 九九热在线精品视频99| 精品久久久久中文字幕日本| 亚洲第一无码专区天堂| 久久a级片| 国产剧情福利av一区二区| 国产精品美女乱子伦高| 亚洲中文字幕精品久久久久久动漫| 麻豆精品在线播放| 国产伦精品一区二区三区妓女 | 少妇人妻偷人偷人精品| 云和县| 亚洲愉拍自拍另类图片| 精品亚洲成av人在线观看| 全免费a级毛片免费看| 欧美三级第一页| 人妻中文字幕av资源站| 亚洲天堂男人| av无码人妻波多野结衣| 国产麻豆剧果冻传媒一区| 98精品国产综合久久| 乱码午夜-极品国产内射| 国产91麻豆视频免费看| 伊人精品成人久久综合97| 亚洲日本欧美日韩高观看| 精品无码一区二区三区的天堂| 亚洲国产成人资源在线 | 三上悠亚在线精品二区| 乱子真实露脸刺激对白| 精品熟女碰碰人人a久久| 国产精品露脸视频| 人人妻人人澡AV天堂香蕉| 激情的视频一区二区三区| 日韩激情电影一区二区在线| 久久久欧美精品激情|