觸發視圖更新:css
push() pop() shift() unshift() splice() sort() reverse()
因爲 JavaScript 的限制,Vue 不能檢測如下變更的數組:vue
因爲 JavaScript 的限制,Vue 不能檢測對象屬性的添加或刪除:webpack
在開發過程當中,咱們時常會遇到這樣一種狀況:當vue的data裏邊聲明或者已經賦值過的對象或者數組(數組裏邊的值是對象)時,向對象中添加新的屬性,若是更新此屬性的值,是不會更新視圖的。web
根據官方文檔定義:若是在實例建立以後添加新的屬性到實例上,它不會觸發視圖更新。
例如:數組
this.obj = Object.assign({}, this.obj, { a: 1, e: 2 })
.lazy
在默認狀況下,v-model 在每次 input 事件觸發後將輸入框的值與數據進行同步 (除了上述輸入法組合文字時)。你能夠添加 lazy 修飾符,從而轉變爲使用 change 事件進行同步:函數
<!-- 在「change」時而非「input」時更新 --> <input v-model.lazy="msg" >
filter中獲取不到this
解決方法:性能
var vm = new Vue({ data () { return { content: 'abcd' } }, filters: { XXX: function(data){ return vm.content; } }, ... });
<template> <div>{{ content | reverseStr(content) }}</div> </template> new Vue({ data () { return { content: 'abcd' } }, filters: { XXX: function(data, content){ return content; } }, ... });
@hook
能夠監聽到子組件的生命週期鉤子函數(created
,updated
等等).
例如:@hook:mounted="doSomething"
ui
<template> <Child v-bind="$props" v-on="$listeners" @hook:mounted="doSomething"> </Child> </template> <script> import Child from "./Child"; export default { props: { title: { required: true, type: String } } components: { Child }, methods: { doSomething(){ console.log("child component has mounted!"); } } }; </script>
函數式組件, 無狀態,沒法實例化,內部沒有任何生命週期處理方法,很是輕量,於是渲染性能高,特別適合用來只依賴外部數據傳遞而變化的組件。this
子組件:code
<template functional> <div> <p v-for="(name, idx) in props.users" @click="props.clickHandler(name)" :key="idx"> {{ name }} </p> </div> </template>
父組件:
<template> <div> <UserList :users="users" :click-handler="clickHandler.bind(this)"></UserList> </div> </template> <script> import UserList from "./UserList"; export default { name: "App", data: () => { users: ['james', 'ian'] } components: { UserList }, methods: { clickHandler(name){ console.log(`clicked: ${name}`); } } }; </script>
第一步:CSS Modules 必須經過向css-loader
傳入modules: true
來開啓
第二步:在<style>
上添加module
特性
// webpack.config.js { module: { rules: [ { test: /\.css$/, use: [ 'vue-style-loader', { loader: 'css-loader', options: { // 開啓 CSS Modules modules: true, // 自定義生成的類名 localIdentName: '[local]_[hash:base64:8]' } } ] } ] } } <style module> .red { color: red; } .bold { font-weight: bold; } </style>
這個 module 特性指引 Vue Loader 做爲名爲 $style 的計算屬性,向組件注入 CSS Modules 局部對象。而後你就能夠在模板中經過一個動態類綁定來使用它了:
<template> <p :class="$style.red"> This should be red </p> </template>
CSS 屬性名能夠用駝峯式 (camelCase) 或短橫線分隔 (kebab-case,記得用引號括起來) 來命名:
<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div> 或 data: { activeColor: 'red', fontSize: 30 }