国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Vue組件化通訊的實例代碼

2019-11-19 16:15:47
字體:
供稿:網(wǎng)友

1. Vue的組成文件(.vue)

分為三部分,分別對應(yīng)html,js,css

<template></template><script></script><style></style>

2. Vue的生命周期函數(shù)

  1. beforeCreate() 創(chuàng)建數(shù)據(jù)之前
  2. created() 創(chuàng)建數(shù)據(jù) 我們在這里的得到我們在data里面創(chuàng)建的數(shù)據(jù)
  3. beforeMount() // Dom渲染完成前
  4. mounted() //Dom渲染完成
  5. beforeUpdate() // 更新視圖 在beforeUpdate觸發(fā)時,視圖已經(jīng)更新完成
  6. Updated() //更新數(shù)據(jù)調(diào)用的函數(shù)、。
<div id='app'> <p>{{msg}}</p> <input type='text' v-model='msg'></div>var app = new Vue({ el: '#app', data() {  return {   msg: 1  } }, beforeCreate() {  console.log('beforeCreate', this.msg); //beforeCreate undefined  console.log('beforeCreate: ', document.getElementsByTagName('p')[0]) //beforeCreate <p>{{msg}}</p> }, created() {  // 創(chuàng)建數(shù)據(jù)  console.log('created', this.msg); //beforeCreate 1   console.log('created: ', document.getElementsByTagName('p')[0]) //beforeCreate <p>{{msg}}</p>  // 異步處理得到渲染的dom數(shù)據(jù)  setTimeout(() => {   this.msg = 100   console.log('nextTick', document.getElementsByTagName('p')[0])   }, 100)  // nextTick <p>100</p> }, beforeMount() {  console.log('beforeMount', this.msg) //beforeMount 1  console.log('beforeMount: ', document.getElementsByTagName('p')[0]) // beforeMount <p>{{msg}}</p> }, mounted() {  // 渲染dom  console.log('mounted', this.msg) //mounted 1  console.log('mounted: ', document.getElementsByTagName('p')[0]) //mounted <p>1</p> }, beforeUpdate() {  console.log('beforeUpdate', this.msg) //beforeUpdate 100  console.log('beforeUpdate: ', document.getElementsByTagName('p')[0]) //beforeUpdate <p>100</p> }, updated() {  console.log('updated', this.msg) // updated 1  console.log('updated: ', document.getElementsByTagName('p')[0]) // updated <p>100</p> }})

生命周期參考鏈接

3. export default

每一個模塊都是自己的作用域,相應(yīng)的屬性來處理數(shù)據(jù)和函數(shù)

data(聲明數(shù)據(jù),可以是函數(shù)和屬性)

類型:Object | Function

組件只接受函數(shù)

  // 對象的形式  export default{   data: {    a:1   }  }  // 函數(shù)的形式  export default{   data(){    return {     a: 1    }   }  }

methods(一些指令和其他屬性的調(diào)用方法)

  1. 不要用箭頭函數(shù)來寫里面的函數(shù)
  2. this指向Vue的實例
 export default{  methods: {   plus() {    this.a++   }  } }

1、components (組件化定義)

類型: Object

自定義元素,增加代碼的復(fù)用性

 // 當(dāng)我們引用一個.vue文件的時候,就像使用這個文件來充當(dāng)我們主體的一部分 <div>   <hello></hello>  </div> import hello from './hello.vue' export default {  components: {   hello  } }

2、computed(計算屬性)

  1. 計算屬性的結(jié)果會被緩存,依賴的數(shù)據(jù)發(fā)生變化才會重新渲染
  2. 注意計算屬性和methods,watch的區(qū)別
{{this.total}} //[3,4]<button @click='add'>添加數(shù)據(jù)</button> //點擊會更新this.total  export default { data: () => ({  a: 1,  b: [2,3] }), methods: {  add(){   this.b.push(8);  } }, computed: {  total(){   return this.b.map((item)=>{    return item+this.a   })  } }}

watch(監(jiān)聽對應(yīng)的數(shù)據(jù))

  1. 鍵值對。鍵是我們需要監(jiān)督的數(shù)據(jù),值是相應(yīng)的回調(diào)函數(shù)
  2. 回調(diào)函數(shù)接受2個參數(shù),新的值和舊的值(對于數(shù)組和對象不會出現(xiàn)舊值,對于簡單的數(shù)據(jù)會出現(xiàn)舊值)
  3. 監(jiān)聽對象的內(nèi)部值變化,需要添加deep:true(數(shù)組不用)
// 點擊后相應(yīng)的變化data(){  return {   a: 1,   b: [2,4,6],   c:{name:'hcc',age:22}  } },methods: {  add(){   this.a++   this.b.push(8)   this.c.name = 'yx'  } },watch: {  b: function(val, oldVal){    console.log('new', val) //[2,4,6,8]    console.log('new', oldVal) //[2,4,6,8]  },  a: function(val, oldVal){   console.log(val); //2   console.log(oldVal); //1  },  c:{   handler(val){    console.log(val); //{name: 'yx',age: 22}   }   }},

props(用于接受父組件傳來的數(shù)據(jù))

  1. 規(guī)定和接受父組件的數(shù)據(jù)
  2. 單向數(shù)據(jù)流,子組件不能修改傳遞過來的數(shù)據(jù)
  3. 對象和數(shù)組是引用類型,指向同一個內(nèi)存空間,如果 prop 是一個對象或數(shù)組,在子組件內(nèi)部改變它會影響父組件的狀態(tài)。
  4. 可以規(guī)定接受的數(shù)據(jù)類型和默認值,如果是對象和數(shù)組,默認值導(dǎo)出是一個函數(shù)
// 父組件<hello :formParent='num'></hello> //htmlcomponents: { hello},data(){ return {  num: 3 }}//子組件//1. 數(shù)組規(guī)定接受的數(shù)據(jù)props: ['hello']//2. 驗證的方式props:{ hello: Number, hello: [String, Number], hello: {  type: Object,  default(){   return {message: 'hello'}  } }}

v-on和v-emit(子組件向父元素傳遞數(shù)據(jù))

vm.$emit: 子元素向父元素定義訊號和傳遞數(shù)據(jù)

this.$emit('規(guī)定的訊號名稱', '想傳遞給父元素的數(shù)據(jù)')

vm.$on: 監(jiān)聽訊號,并觸發(fā)相應(yīng)的函數(shù)(函數(shù)內(nèi)部不用傳參)

@'規(guī)定的訊號名稱'='調(diào)用自己組件的方法并可以接受傳遞的參數(shù)'

// 子組件data () { return {  msg: 'Welcome to Your Vue.js App' }},methods: { change(){  this.$emit('sendMsg',this.msg) //把msg傳遞給父組件 }}// 父組件// 引入子組件,并定義componentscomponents: { hello},methods: { show(msg){   // 這里接受子組件傳遞的參數(shù)  console.log(msg); }}<hello @sendMsg='show'></hello> // 這里不用傳遞參數(shù),不然會覆蓋子元素傳遞的參數(shù)

ref(用來獲取dom和子組件)

  1. 可以用來操作dom<p ref="p">hello</p>
  2. 可以用來組件中的通訊
  3. 在組件中使用的this.refs是一個對象,包含了所有的綁定了的dom和子組件
// html  <h1 ref="myElement">這是一個dom元素</h1> //dom元素 <hello :propnum="propnum" :obj='d' @getson='getMsg' ref='child'></hello> // 子組件 >-- 組件中this.refs => {myElement: h1, child: VueComponent}// 運用(在父元素中調(diào)用子元素的方法)// html <hello ref='child'></hello> // 子元素hello methods: {  change() {   this.$emit('getson',this.msg)   this.obj.name = 'yx'  },   drop(el) {    el.style.background = 'red';   } },// 父元素methods: { add() {  console.log(this.refs); //{child: VueComponent}  this.$refs.child.drop('這里傳遞父元素的dom節(jié)點') }}//如果有一個需求是,一個父元素有2個子組件,其中一個子組件的方法要調(diào)用另一個子組件的dom元素//1. 一個子組件需要向父組件發(fā)送元素this.$emit('方法名',dom)//2. 父元素接受到子組件的傳遞得到對應(yīng)dom//3. 父元素通過this.$refs調(diào)用對應(yīng)的另一個子組件的方法并傳入?yún)?shù)// 子元素hello和world <div class="world">  <h1 ref="world">這是world的dom元素</h1>  <button @click='send'>給父元素傳遞dom</button> </div> methods: {  send(){   this.$emit('give',this.$refs.world); //給父元素發(fā)送dom }  <div class='hello'>  <button>改變dom</button> </div>  methods: {  changeDom(target){   console.log(target)  } } // 父元素 <world @give='父親自己的方法'></world> <hello ref='helloChild'></hello> methods: {  // 這里接受子元素傳遞過來的dom元素  '父親自己的方法'(target) {   this.refs.helloChild.changeDom(target) //調(diào)用另一個子元素的方法,并把dom傳遞過去  } }

​以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 阳信县| 昭苏县| 麟游县| 金塔县| 东辽县| 正蓝旗| 佛冈县| 安泽县| 英山县| 五大连池市| 二连浩特市| 天祝| 靖宇县| 邛崃市| 綦江县| 兰溪市| 徐闻县| 青龙| 馆陶县| 永康市| 桦川县| 仪陇县| 阜新| 长丰县| 中方县| 师宗县| 阜康市| 丁青县| 马关县| 仲巴县| 炉霍县| 鄂州市| 社旗县| 京山县| 交城县| 永定县| 织金县| 万盛区| 镇坪县| 连平县| 武穴市|