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);