new Vue(options)
el
目的地(能夠用類名、標籤名等,也能夠直接用mod元素)
#elementId
.elementClass
div
document.getElementById('elementId')
template
內容data
數據v-if
是否插入元素v-show
是否隱藏元素v-bind
給元素屬性賦值,單向數據綁定
v-model
在表單控件或者組件上建立雙向綁定v-on
綁定事件
(參數)
v-on:click="warn('參數', $event)"
v-for
遍歷
循環對象 (val, key, index)javascript
<div v-for="(item, index) in items"></div> <div v-for="(val, key) in object"></div> <div v-for="(val, key, index) in object"></div>
v-bind
傳遞,子組件必須props裏先聲明props能夠指定數據類型(String/Number/Boolean/Array/Object/Date/Symbol/Function)html
const MyHeader = { template: `<h1>我是頭部</h1>` } const MyBody = { template: `<h1>我是中部 {{index}}</h1>`, //props: ['index'], props: { items: { // 必須提供字段 type: String, //指定類型 required: true }, index: { // 可選字段,有默認值 type: Number, default: 3 }, // 帶有默認值的對象 propE: { type: Object, // 對象或數組默認值必須從一個工廠函數獲取 default: function () { return { message: 'hello' } } }, // 自定義驗證函數 propF: { validator: function (value) { // 這個值必須匹配下列字符串中的一個 return ['success', 'warning', 'danger'].indexOf(value) !== -1 } } } } let app = new Vue({ el: '#demo1', components: { 'my-header': MyHeader, 'my-body': MyBody, 'my-footer': MyFooter }, template: ` <div> <my-header/> <my-body :index="tip"/> </div> `, data: { tip: 1 } })
Vue.component('組件名',組件對象)
全局過濾器:前端
Vue.filter('my-filter', function (value) { // 返回處理後的值 })
filters:{ '過濾器名','過濾方式fn' }
參數:(newVal,oldVal)vue
watch({'myText': function (newVal, oldVal) { // 作點什麼 }})
深度監視的方法:java
watch({'myText': { deep: true, handler: function (newVal, oldVal) { // 舊值將與新值相同 } }})
計算屬性默認只有 getterwebpack
computed: { // 計算屬性的 getter fullName: function () { // `this` 指向 vm 實例 return this.firstName + ' ' + this.lastName } }
也能夠提供一個 setterios
computed: { fullName : { //this.firstName改變或this.lastName改變觸發get方法 //this.fullName改變時執行set方法 get: function () { return this.firstName + ' ' + this.lastName }, set: function (newValue) { var names = newValue.split(' '); this.firstName: names[0]; this.lastName: names[names.length - 1]; } } }
使用方法:定義的組件中包含 <slot>
web
組件: <a v-bind:href="url" class="nav-link" > <slot></slot> </a> 使用: <navigation-link url="/profile"> Your Profile </navigation-link>
<slot>
元素有一個特殊的特性:name。這個特性能夠用來定義額外的插槽能夠在組件模板裏的 <slot>
標籤內部指定默認的內容vue-router
v-if=true
時觸發v-if=false
時觸發注意:使用
v-if
頻繁觸發組件建立與銷燬不合理,應該使用<keep-alive>
包裹組件vuex
<keep-alive>
包裹的組件激活<keep-alive>
包裹的組件停用ref="{自定義元素名}"
this.$refs.{自定義元素名}
獲取到元素ref="{自定義組件名}"
,獲取到的就是組件對象Vue中DOM更新是異步的,異步致使DOM未渲染,沒法操做DOM元素的解決辦法
this.$nextTick(function(){ //執行 })
Vue.use(VueRouter); var router = new VueRouter({ routes: [ { name:'login', path: '/login',component: Login }, { name:'register', path: '/register',component: Register } ] }) //也能夠router.addRoutes([{},{}]) var app = { template:`<div> <router-link to="/login">登陸</router-link> <router-link :to="{name:'register'}">註冊</router-link> <router-view></router-view> </div>` }; new Vue({ el: "#app", router:router, components:{ app:App }, template: '<app/>' })
<router-link :to="{name:'register',query:{id:1}}">註冊</router-link>
{ name:'register', path: '/register',component: Register }
<a href="/register?id=1">
this.$route.query
獲取參數對象:to="{name:'register',params:{id:1}}"
{ name:'register', path: '/register/:id',component: Register }
<a href="/register/1">
this.$route.params
router-view套router-view,路由children路由
const Login = { template: `<div> 我是登陸頁 <router-link :to="{name:'login.woman'}">女性登陸頁</router-link> <router-view></router-view> </div>`, }; var router = new VueRouter({ routes: [{ name: 'login', path: '/login', component: Login, children: [{ name: 'login.woman', path: 'woman', component: Woman }]}, {name: 'register', path: '/register', component: MyHeader} ] })
router.beforeEach((to,from,next) => {})
next()
next(false)
next( { name:'login' } )
{meta:{isChecked:true}}
Vue.prototype.$axios = axios;
合併請求
axios.all([getUerAccount(),getUserPermissions()]) .then(axios.spread(function(acc,pers){ //兩個請求如今都完成 }));
取消請求
const CancelToken = axios.CancelToken; const source = CancelToken.source(); // 建立標識請求的源對象 this.source = source; // 講對象存儲到組件 cancelToken: source.token, // 請求的options屬性 this.source.cancel(); // 取消到以前的那個請求 //前端的斷電續傳,及時獲取當前上傳的文件大小,儲存起來 var file = <input type="file"/> .files[0].slice(文件開始部分,文件結尾部分) new FormData().append('file',file); // 後臺就是接受屢次文件,都往上傳文件上追加
響應攔截器:在響應回來之後,作的事
axios.interceptors.request.use(function(config){ //在請求發送以前作一些事 return config; },function(error){ //當出現請求錯誤是作一些事 return Promise.reject(error); });
axios.interceptors.response.use(function(response){ //對返回的數據進行一些處理 return response; },function(error){ //對返回的錯誤進行一些處理 return Promise.reject(error); });
"name='jack'"
時,數據類型爲formData形式module.exports
module.exports='xxx'
進行賦值module.exports
從原來的空對象就有值了return module.exports
所爲require函數的返回值const store = new Vuex.Store()
this.$store.commit()
this.$store.state.xxx=
直接修改location.pathname
來作渲染ref="xxx"
this.$refs.xxx
獲取此子組件對象this.$nextTick(function(){ //執行 })
methods
中定義回調方法@close="handleClose"
bus.$on('event', msg => {// 執行操做})
註冊監聽事件bus.$emit('event', msg)
觸發監聽操做this.$emit('change', arguments);