vue其他知識

計算屬性

使用場景:當變量的值, 依賴其他變量計算而得來才用

特點:計算屬性的依賴項發(fā)生改變的時候, 重新計算結果返回并重新緩存,如果沒變化,直接從緩存取結果

注意: 計算屬性也是vue數(shù)據(jù)變量, 所以不要和data里重名, 用法和data相同

語法:

computed:{
"計算屬性名" (){
return "值"
}
}
<template>
  <div>
# computed 再使用時,是讀取緩存 不會重復計算
    <h1>{{num}}</h1>
    <h1>{{num}}</h1>
    <h1>{{num}}</h1>
# 函數(shù)調用,進行較復雜運算時,性能就比computed差
    <h2>{{getnum()}}</h2>
    <h2>{{getnum()}}</h2>
    <h2>{{getnum()}}</h2>
    <input type="text" v-model.number="a">
    <input type="text" v-model.number="b">
  </div>
</template>
<script>
export default {
  data () {
    return {
      a:0,
      b:0
    }
  },
  computed: {
    num(){
      console.log("computed");
      return this.a+this.b
    }
  },
  methods: {
    getnum(){
      console.log("getnum");
      return this.a+this.b
    }
  }
}
</script>

計算屬性完整寫法

如果想直接賦值,需要使用完整寫法

語法:

computed: {
    "計算屬性名": {
        set(值){ 
        },
        get() {
            return "值"
        }
    }
}
<template>
  <div>
    名字
    <input type="text" v-model="full" />
  </div>
</template>
<script>
export default {
  computed: {
    // 這種函數(shù)寫法其實是get的簡寫,問題:不能修改變量的值
    // full(){
    //   return "烏拉拉"
    // }
    // 注意:如果要對對象計算屬性的值進行修改,就必須帶set的完整寫法,否則報錯
    full: {
      get() {
        return "什么鬼";
      },
      //修改的值自動被set的形參接收
      set(val) {
        console.log(val);
      },
    },
  },
};
</script>

偵聽器--watch

偵聽簡單數(shù)據(jù)類型

目標: 可以偵聽data/computed屬性值改變

語法:

watch: {
    "被偵聽的屬性名" (newVal, oldVal){  
    }
}
<template>
  <div>
    <input type="text" v-model="name" />
  </div>
</template>

<script>
/*
偵聽器watch
作用:偵聽data/computed數(shù)據(jù)值的變化
語法:
watch:{
  "被偵聽的屬性名"(val,oldVal){
    val:第一個參數(shù) 表示現(xiàn)在的值
    oldVal:第二個參數(shù) 表示原本的值
  }
}
*/
export default {
  data() {
    return {
      name: "",
    };
  },
  watch: {
    name(newval, oldval) {
      console.log("新值:", newval);
      console.log("舊值:", oldval);
    },
  },
};
</script>

偵聽復雜數(shù)據(jù)類型

目標: 偵聽復雜類型, 或者立即執(zhí)行偵聽函數(shù)

語法:

watch: {
    "要偵聽的屬性名": {
        immediate: true, // 立即執(zhí)行
        deep: true, // 深度偵聽復雜類型內變化
        //handler固定方法觸發(fā)
        handler (newVal, oldVal) {
        
        }
    }
}
<template>
  <div>
    <input type="text" v-model.trim="user.name" />
    <input type="text" v-model.trim="user.age" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      user: {
        name: "哈哈",
        age: 18,
      },
    };
  },
  watch: {
    user: {
      immediate: true, //立即偵聽
      deep: true, //深度偵聽
      // handler固定方法觸發(fā)
      handler() {
        console.log("user變化了");
      },
    },
  },
};
</script>

$refs知識

利用ref和$refs可以獲取dom元素,獲取組件對象,調用組件方法

<template>
  <div>
    <h1 id="h1Id" ref="h1Ref">這是一個h1標題</h1>
    <!-- 子組件 -->
    <son ref="de" />
  </div>
</template>

<script>
import son from "@/components/son.vue";
export default {
  // 注冊組件
  components: {
    son,
  },
  mounted() {
    console.log(document.querySelector("#h1Id"));
    // 獲取dom
    console.log(this.$refs.h1Ref);
    // 獲取組件實例梢为,可以對組件為所欲為
    // ?? 開發(fā)經驗:一般只調用組件內部的方法粤铭,不會這種方式改變組件內的數(shù)據(jù)(修改數(shù)據(jù)還用父傳子,子傳父的方式)
    console.log(this.$refs.de);
    // 調用組件內部的方法
    this.$refs.de.fn();
  },
};
</script>

$nextTick知識

Vue更新DOM-異步的

<template>
  <div>
    <p ref="PP">數(shù)字:{{ count }}</p>
    <button @click="btn">點擊加1</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      count: 1,
    };
  },
  methods: {
    btn() {
      this.count++;
      // 以下沒有辦法得到最新的數(shù)據(jù)(點擊后的數(shù)字)
      // DOM的更新是異步的
      // console.log(this.$refs.PP.innerHTML);
      this.$nextTick(() => {
        console.log(this.$refs.PP.innerHTML);
      });
    },
  },
};
</script>

$nextTick使用場景

點擊搜索按鈕, 彈出聚焦的輸入框, 按鈕消失

<template>
  <div>
    <input type="text" ref="II" placeholder="請輸入內容" v-if="isShow" />
    <button @click="btn">點擊進行搜索</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isShow: false,
    };
  },
  methods: {
    btn() {
      this.isShow = true;
      // DOM的更新是異步的
      // 所以點擊后的輸入還是沒有焦點
      // 所以用$nextTick
      this.$nextTick(() => {
        this.$refs.II.focus();
      });
    },
  },
};
</script>

自定義指令

自定義指令也分局部注冊和全局注冊

全局(main.js中注冊):
        Vue.directive("自定義指令名", {
          inserted(el){
            el: 表示使用指令時的標簽
          }
        })

局部(組件中注冊):
        directives:{
          "自定義指令名": {
            inserted(el){
              el: 表示使用指令時的標簽
            }
          }
        }
<template>
  <div>
    <!-- 使用指令:v-指令名稱 -->
    <!-- <input type="text" v-focus /> -->
    <!-- 使用指令:v-指令名稱 -->
    <h1>我是大標題-什么顏色呢?</h1>
    <h2 v-color="'red'">我是二標題-什么顏色呢舀奶?</h2>
    <h3 v-color="myColor">我是三標題-什么顏色呢疼蛾?</h3>
    <button @click="myColor = 'green'">改顏色變量</button>
    <br />
    <input type="text" v-focus />
    <input type="text" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      myColor: "pink",
    };
  },

  directives: {
    // 指令名稱
    focus: {
      // 掛載到頁面后觸發(fā) el
      inserted(el, binding) {
        console.log(el, binding);
        el.focus();
      },
    },
  },
};
</script>
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末枯途,一起剝皮案震驚了整個濱河市教寂,隨后出現(xiàn)的幾起案子页慷,更是在濱河造成了極大的恐慌憔足,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酒繁,死亡現(xiàn)場離奇詭異滓彰,居然都是意外死亡,警方通過查閱死者的電腦和手機州袒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門揭绑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事他匪」酱妫” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵邦蜜,是天一觀的道長依鸥。 經常有香客問我,道長悼沈,這世上最難降的妖魔是什么贱迟? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮絮供,結果婚禮上衣吠,老公的妹妹穿的比我還像新娘。我一直安慰自己杯缺,他們只是感情好蒸播,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著萍肆,像睡著了一般袍榆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上塘揣,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天包雀,我揣著相機與錄音,去河邊找鬼亲铡。 笑死才写,一個胖子當著我的面吹牛,可吹牛的內容都是我干的奖蔓。 我是一名探鬼主播赞草,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吆鹤!你這毒婦竟也來了厨疙?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤疑务,失蹤者是張志新(化名)和其女友劉穎沾凄,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體知允,經...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡撒蟀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了温鸽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片保屯。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出配椭,到底是詐尸還是另有隱情虫溜,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布股缸,位于F島的核電站衡楞,受9級特大地震影響,放射性物質發(fā)生泄漏敦姻。R本人自食惡果不足惜瘾境,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望镰惦。 院中可真熱鬧迷守,春花似錦、人聲如沸旺入。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茵瘾。三九已至礼华,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拗秘,已是汗流浹背圣絮。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留雕旨,地道東北人扮匠。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像凡涩,于是被迫代替她去往敵國和親棒搜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容

  • 1活箕、從輸入url到瀏覽器呈現(xiàn)頁面中間經歷了什么帮非? 在輸入url的時候,會進行本地歷史記錄和標簽頁的查詢讹蘑,提供模糊查...
    林思念閱讀 2,468評論 2 24
  • Vue -漸進式JavaScript框架 介紹 vue 中文網 vue github Vue.js 是一套構建用戶...
    桂_3d6b閱讀 800評論 0 0
  • vue2基礎第一天 1.vue指令 實質上就是特殊的 html 標簽屬性, 特點: v- 開頭 插值表達式 在d...
    這個名字很有品味閱讀 556評論 0 0
  • 什么是Vue 是一套用于構建用戶界面的漸進式 javascript 框架(漸進式:想用什么就用什么不必全都用) 在...
    王果果閱讀 4,742評論 0 14
  • 語法糖:通過更簡單易理解的語法方式,優(yōu)化原語法的表達形態(tài)筑舅,增強代碼的可讀性座慰,從而直接減少代碼出錯的機會。 VUE讀...
    老楊曲線閱讀 142評論 0 0