//1.创建组件构造器语法格式如下
//ES6中可以用``定义字符串,可以包括换行信息
const 组建构造器名称 = Vue.extend({
//该组件的模板信息
template: `
})
//要求传递两个参数,第一个是组件的标签名,第二个是组件构造器
Vue.component('标签名', 组件构造器)
<div id="app">
<标签名>标签名>
div>
const app = new Vue({
el: '#app',
data: {
message: ''
},
//注册局部组件 只能在app中使用
components: {
标签名: 组件构造器
}
})
Vue.component('标签名',组件构造器)//全局组件
props:{
cmessage:{
//传递的类型
type:String,
//默认值
default:'aaaaa',
//required是布尔类型 若为true则为必传值
required:true
},
//类型是对象或者数组时,默认值必须是一个函数
cmovies:{
type:Array,
default(){
return []
}
}
}
Vue.component('cpn',{
template:'#cpp',
data(){
return{
title:'' //模板中需要放入的数据内容
}
}
})
<div id="app">
<cpn ref="aaa"></cpn>
</div>
<slot><button>按钮</button></slot>
<template id="cpn">
<div>
<slot name="left"><span>左边</span></slot>
<slot name="center"><span>中间</span></slot>
<slot name="right"><span>右边</span></slot>
</div>
</template>
//在模板文件中写export
export {
flag, sum
}
//在需要导入的文件中写import
import {num1, height} from "./aaa.js";
const routes = [
{
path:'/home',
component:Home
}, //一个组件是一个映射关系
{
path:'/about',
component:About
}
]
//显示组件
<router-link to="/home">首页</router-link>;
<router-link to="/about">关于</router-link>;
//渲染组件内容 //在link上面则在其上面渲染 否则在下面渲染
<router-view></router-view>
const routers = [
{
path:'',
redirect:'/home1' //重定向
}
]
const router = new VueRouter({
routes,
mode:'history'
})
homeClick(){
this.$router.push('/home'); //pushState
this.$router.replace('/about'); //不可以返回
}
<router-link v-bind: to="'/user/'+userId">用户</router-link>
const Home = () => import('../components/Home') //一般都用这个写法
/1.配置嵌套子路由
const routes = [
{
path:'/home',
component:Home,
children:[
{
path:'',
redirect:'news'
}
{
path:'news'
componet:HomeNews,
},
{
path:'message'
component:Homemessage,
}
],
}
]
//2.在父路由的vue里面(这里就是Home.vue里)写用于决定显示位置
//3.在App.vue里写上router-link
<router-link to="/home/news">新闻</router-link>
<router-link to="/home/message">信息</router-link>
const routers:[
{
path:'user/:abc',
component:User
}
]
<router-link :to="'/user/'+userId">用户</router-link>
computed:{
userId(){
return this.$router.params.id
}
}
<router-link :to="{path: '/profile',query:{name:'why',age:18,height:1.65}}">档案</router-link>
new Promise((resolve, reject) => {
setTimeout(() => {
// 成功的时候调用resolve
// resolve('Hello World')
// 失败的时候调用reject
reject('error message')
}, 1000)
}).then((data) => { //成功的时候来到then 进行下一步操作
new Promise((resolve, reject) => {
// 第一次网络请求的代码
setTimeout(() => {
resolve() //去到then处理代码
}, 1000)
}).then(() => {
// 第一次拿到结果的处理代码
console.log('Hello World');
return new Promise((resolve, reject) => {
// 第二次网络请求的代码
setTimeout(() => {
resolve()
}, 1000)
})
}).then(() => {
// 第二次处理的代码
console.log('Hello Vuejs');
return new Promise((resolve, reject) => {
// 第三次网络请求的代码
setTimeout(() => {
resolve()
})
})
}).then(() => {
// 第三处理的代码
console.log('Hello Python');
})
Vue.use(Vuex)
const store = new Vuex.Store({
state:{ //保存状态
counter: 1000 //可以通过$store.state.counter引用
},
mutations:{},
actions:{},
getters:{},
modules:{}
})
export store
getters:{
powerCounter(state){
return state.counter * state.counter
}
}
more20stulength(state, getters){
return getters.more20stu.length
}
moreAgeStu(state){
return function(age){
return state.students.filter(s => s.age > age)
}
}
mutations:{
//方法
increment(state){
state.counter++
},
decrement(state){
state.counter--
}
}
increment:function(){
this.$store.commit('increment')
}
//模板里的内容
<button @click="addCount(5)">+5</button>
<button @click="addCount(10)">+10</button>
//methods定义方法
methods:{
addCount(count){
this.$store.commit('incrementCount',count)
}
}
//在mutation力接受传递的参数
mutations:{
incrementCount(state,count){
state.counter += count
]
}
//mutation的action里面
action: {
aUpdateInfo(context, payload){
return new Promise((resolve, reject) => {
setTimeout(() => {
context.commit('updateInfo');
console.log(payload);
resolve('11111')
},1000)
})
}
}
//在组件内调用时
this.$store.dispatch('aUpdateInfo', '我是携带的信息')
.then(res => {
console.log('里面完成了提交');
console.log(res);
})
const moduleA = {
state:{},
mutations:{},
actions:{},
getters:{}
}
const moduleB = {
state:{},
mutations:{},
actions:{},
getters:{}
}
const store = new Vuex.Store({
modules: {
a: moduleA
b: moduleB
}
})
store.state.a
store.state.b
import axios from 'axios'
axios({
//数据链接 默认情况下是get请求
url:'httpbin.org/',
params:{
}
}).then(res => {
console.log(res); //打印数据详情
})
axios({
url:'htttp://123.207.32.32:8000/home/data',
params:{
type:'pop',
page:1
}
}).then(res => {
console.log(res);
})
axios.all([axios({
url:'htttp://123.207.32.32:8000/home/multidata'
}),axios({
url:'htttp://123.207.32.32:8000/home/data',
params:{
type:'sell',
page:4
}
})]).then(axios.spread((res1, res2) => {
console.log(res1);
console.log(res2);
}))
事实上我们开发中很多的参数可能都是固定的,这个时候我们可以进行一些抽取,也可以利用axios的全局配置
axios.defaults.baseURL = 'http://123.207.32.32:8000'
//请求超时时间 单位毫秒
axios.defaults.timeout = 5000
含义 | 源码 |
---|---|
请求地址 | url:’/user’ |
请求类型 | method:‘get’ |
请根路径 | baseURL:’ http://…’ |
请求前的数据处理 | reansformRequest:[function(data){}] |
请求后的数据处理 | transformResponse:[function(data){}] |
自定义的请求头 | headers{‘x-Requested-With:’:‘XMLHttpRequest’} |
URL查询对象 | params:{id:12} |
const instance1 = axios.create({
baseURL:'http://123.207.32.32:8000',
timeout:5000
})
instance1({
url:'/home/multidata'
}).then(res => {
console.log(res);
})
const instance2 = axios.create({
baseURL:'http://222.111.33.33:8000',
timeout:10000,
})
export function request(config) {
return new Promise((resolve, reject) => {
//创建axios实例
const instance = axios.create({
baseURL:'http://123.207.32.32:8000',
timeout:5000
})
//发生真正的网络请求
instance(config).then(res => {
resolve(res)
})
.catch(err => {
reject(err)
})
})
}
request({
url:'/home/mutidata'
}).then(res => {
console.log(res);
}).catch(err => {
console.log(err);
})