2.const 1. 是常量不能修改
3.对象创建
1.可以先定义const name=1;
Const a={name};
输出a的话就是{“name”:1};
Const a={
Run(){
},
Set(){
}
}
4. 遍历 遍历1 for(let i;i 遍历2 for(let i in data) //i 直接为data数据的下标 遍历3 for(let one of data) //one 直接为data相应的数据 5. 函数 ...nub //es6接收参数新特性 function A(...a){ console.log(a); } let e=n.filter(function(a) { if(a>30) return true; });一、Vue基础知识
13.v-on: 语法糖简写为 @click
+
如果函数需要有参数
2. 如果没设置小括号
1.那么参数就是事件event
+
//没加括号+
//加括号给函数实参加上$event 接收以后就是这个事件
.stopt //停止冒泡
.prevent //阻止默认行为
@submit.prevent //阻止默认行为,没有表达式
@click.stop.prevent //串联修饰符
@keyup.enter=”onEnter” //键修饰符,键别名
@keyup.13=”onEnter” //键代码,键别名
.click.once //回调只会触发一次
aaa{{count}}
//如果为false那么不渲染上页面.v-else-if
V-else
16.
代码复用 如果不加key的话那么复用的代码会重复显示 key值不一样的话就会避免这种情况 key值一样的话就会复用
给lable标签加上for=“id” 以后点击lebel焦点自动定位到id为id的input上
!!!遍历数组 第一个永远是value 第二个永远是index值
!!!遍历json 第一个永远是value 第二个永远是K值 第三个永远是index值
1.数据双向绑定input标签
2.v-model与radio结合
1-如果几个input按钮 绑定的都是同一个v-model那么 name=” ”这个参数就 可以省略
2-
如果选中这个那么双向绑定的sex值就会是这个input的value
3.v-model与checkbox结合
1-如果被选中那么v-model就是true 相反则为false
并且可以设置小列子比如点击某个按钮以后才可以继续
2.如果panduan为这种形式 那么v-model的 值为true 或者false
如果panduan为这种形式,那么v-model的值为 这个复选框的value panduan的值将为一个数组
4.v-model与select结合跟v-model与radio结合一样
select如果加上属性multiple 就可以将下拉框里面的东西复选了 复选时得按ctrl键
5. v-model修饰符 v-model.lazy //当input标签失去焦点的时候才会改变这个 v-model值
6. v-model 修饰符 v-model.number //因为v-model将得到的值自动转换为string 所以加一个修饰符的话就可以将这个字符串转化为number类型
7.v-model 修饰符 v-model.trim //可以去除字符串首尾的空格
const cpnc=Vue.extend({
template:`
wojinlaila
`
})
Vue.component("cpn",cpnc);
const app=new Vue({
el:"#aaa",
components:{
cpn:cpnc
}
})
const cpnc=Vue.extend({
template:`
wojinlaila
`,
components:{
aa22:cpnc1
}
})
Vue.component("cpn",{
template:`
wojinlaila
`,
components:{
aa22:cpnc1
}
});
(2)
const app=new Vue({
el:"#aaa",
components:{
cpn:{
template:`
wojinlaila
`,
components:{
aa22:cpnc1
}
}
}
})
components:{
cpn:{
template:"#muban"//直接把script 模板标签”#id”仍在这就 行
}
}
{
template:"#muban",
data(){
return {
title:"woshibiaoti"
}
}
}
export default {} //导出
import app from "./vue/app"; //接收
npm install webpack@3.6.0 --save-dev
必须通过webpack函数使用
创建两个文件夹 src dist 分别为源js文件夹 webpack生成的文件夹
命令:webpack ./src/asd.js ./dist/bundle11.js
const path=require('path');
module.exports={
entry:"./src/asd.js",
output:{
path:path.resolve(__dirname,"dist"),
filename:"wangzhaoyang.js"
}
}
npm install style-loader@0.23.1 --save-dev
npm install less-loader@5.0.0 --save-dev //安装less-loader依赖 两个都得装下
针对背景图关于css样式里面的url属性
{
test: /\.js$/,
//exclude 排除因为不想将下面的文件转换为es5
//include 包括
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['es2015'] //这里做一个修改
}
}
}
resolve: {
alias: {
'vue$': 'vue/dist/vue.esm.js' // 用 webpack 1 时需用 'vue/dist/vue.common.js'
}
},
import Vue from 'vue/dist/vue.js'引用
不再是 import Vue from 'vue'这样引用
⑥npm install vue-loader@13.0.0 vue-template-compiler@2.5.21 --save-dev //安装关于.vue文件的脚手架
!!!!!!!!!!vue-loader的版本要是不对的话会产生提示这样的插件plugin错误
vue-loader was used without the corresponding plugin. Make sure to include VueLoaderPlugin in your webpack config.
vue-template-compiler 版本号 必须!!和vue的版本统一
{
test: /\.vue$/,
use: [
{
loader: 'vue-loader',
}
]
},
<template>
//在这里放置模板
template>
<script>
//引用js语句的话一定要在script中使用
export default {
name:””
//这里放置除了template 的其余属性data啦啥的
}
script>
<style> //这里放置需要设置的css样式代码
style>
import app from "./vue/app1.vue";
import app from "./vue/app1";
需要配置webpack.config.js文件里的extensions属性
resolve: {
extensions:['.js','.css','.vue'],//可以让你省去写.js .css .vue 文件名
alias: {
'vue$': 'vue/dist/vue.esm.js' // 用 webpack 1 时需用 'vue/dist/vue.common.js' 别名 可以让你正确的寻找文件
}
},
"devDependencies": {
"all": "^0.0.0",
"css-loader": "^0.28.0",
"style-loader": "^0.23.1",
"webpack": "^3.6.0"
}
module: {
rules: [
{
test: /\.css$/,
use: [ 'style-loader', 'css-loader' ]
}
]
}
require("./css/aaa.css");
⑦npm install --save-dev html-webpack-plugin@3.2.0//安装将html转化到dist目录下
const HtmlWebpackPlugin=require("html-webpack-plugin");
//然后给module.exports 里面配置属性
plugins:[
new webpack.BannerPlugin("最终版权归王朝阳所有"),
new HtmlWebpackPlugin({})
],
打包的文件的html文件默认是引用了这个打包后js文件的那个html
也可以自己配置 里面的属性 template那个属性就是要打包的文件
new HtmlWebpackPlugin({
template:"a.html"
})
npm install uglifyjs-webpack-plugin@1.1.1 --save-dev
将自动把要压缩的js文件压缩
npm install --save-dev webpack-dev-server@2.9.1
webpack.config.js文件里面配置
直接在命令行中敲出
node_modules\.bin\webpack-dev-server
"scripts": {
"dev":"webpack-dev-server --open"
},
其中 --open 的意思是运行服务器的时候直接打开
npm install webpack-merge@4.1.5 --save-dev
建立一个build文件夹 里面放置三个文件
base.config.js //公共配置文件
dev.config.js //测试文件
prod.config.js //生产文件
测试文件里面的代码格式为
const uglifyJsPlugin=require("uglifyjs-webpack-plugin");
const webpackMerge=require("webpack-merge");
const baseConfig=require('./base.config')
module.exports=webpackMerge(baseConfig,{plugins:[
new uglifyJsPlugin(),
]})
使用:在原先的package.json 文件里面自己设置的build dev属性修改
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack --config ./build/prod.config.js",
"dev": "webpack-dev-server --open --config ./build/dev.config.js"
},
在公共的webpack.config.js文件中(自己定义了一个base.config.js 就是这个东西)修改他的出口path设置 要不就会在自己刚创建的build文件夹中打包自己写的代码
output:{
path:path.resolve(__dirname,"../dist"), //在这里修改
filename:"wangzhaoyang.js"
},
vue create 项目名称 //Vue CLI3
如果装脚手架失败 试试下面这两个
vue ui
//配置路由
import Vue from 'vue'
import Router from 'vue-router'
// 将要显示的vue文件引入到这里
import about from "../components/about.vue"
import home from "../components/home.vue"
//让Vue使用Router插件
Vue.use(Router)
//配置路由和组件的关系
export default new Router({
routes: [
{
path: '/about',
component: about
},
{
path: '/home',
component: home
}
]
})
<router-link to="/about">aboutrouter-link>
<router-view>router-view>
routes: [
{
path: '/',
redirect:"/ahome" //可以将将上面的路由映射到这里
},]
添加一条属性mode:”history”
export default new Router({
routes: [
],
mode:"history" //添加这一条
})
加一条tag=”要渲染成的dom标签”
<router-link to="/home" tag="button">homerouter-link>
那么访问这个就不会留下浏览记录
<router-link to="/home" tag="button" replace>homerouter-link>
修改class名方法1:
<router-link to="/home" active-class="abc">homerouter-link>
修改class名方法2:
export default new Router({
routes: [
],
mode:"history",
linkActiveClass:"aac" //或者这样在这里修改
})
通过添加监听 仔方法里设置下面的语句
this.$router.push("/home"); //有浏览记录
this.$router.replace("/home");//无浏览记录
如果跳转到相同路由会报错的 下面这样就没事了
this.$router.replace("/home").catch(err => err);
{
path: '/use/:name1',
component: use
},
<router-link :to="'/use/'+name1">userouter-link>
this.$route.params.name1;
通过这个可以得到自定义的路由name1
用到的时候才会调用
const about=()=>import("../components/about.vue")
const newabout=()=>import("../components/newabout.vue")
{
path: '/about',
component: about,
children:[
{
path:"newabout", //不是"/newabout"
component:newabout
},
{
path:"newhome",
component:newhome
}
]
},
<router-link to="/about/newhome">newaboutrouter-link>
<router-link :to="{path:'/profile',query:{age:1}}">档案router-link>
router-link标签中的to属性 设置为动态监听: 然后里面的东西改为json类型数据
其中query属性里面传的就是参数 /profile?age=1
$route.query.age
dianji(){
this.$router.push({
path:"/profile",
query:{
name11:"wangzhaoyang"
}
}).catch(err => err);
}
//全局守卫
//前置钩子
Router1.beforeEach(function(to,from,next){
document.title=to.meta.title; //这里meta是理由一里面的元数据 数据的话可以定义在这里
console.log(to);
next();
})
//后置钩子 没有next 不用主动进行next函数
Router1.afterEach(function(to,from){
console.log("!");
})
2.局部守卫(钩子)
beforeEnter:function(to,from,next){
console.log("我是子路由进来了");
next();
}
定义在路由里面 监听这一个路由 有多种守卫
next() 函数里面可以定义路由 可以定义json类型的路有数据路径啦啥的
<keep-alive>
<router-view>router-view>
keep-alive>
data(){
return {
path:"/about/newabout"
}
},
activated(){
//这行语句是防止路由重读加载报错
if (this.path === this.$route.path) return;
this.$router.push(this.path);
console.log("huoyue");
},
beforeRouteLeave(to,from,next){
this.path=this.$route.path;
next();
}
!!!注意包裹的是他上一级路由的
deactivated(){
},
activated(){
},
<keep-alive include="wa,name1">
<router-view>router-view>
keep-alive>
其中resolve是将数据传给下一个then函数 reject的话直接将数据传给最后的错误处理函数
多个路由都需要的话 那么promise.all函数 其中then中接受的参数是数组 第一个数据是第一个写的resolve函数的数据
npm install vuex 直接安装最新的不用顾忌版本问题
Vue.use(Vuex) //安装插件
const store=new Vuex.Store({
//跟data数据一样
state:{
counter:100
},
//跟方法一样
mutations:{
increment(state,jieshow){ //通过这样设置 就可以接受参数了
state.counter+=jieshow;
}
},
// action是处理异步的mutations 用来放一些请求或者异步操作
actions:{
},
//跟计算方法一样
getters:{
powercount(state){
return function(age){
return age
};
}
},
//这里可以以json的形式保存以上各种形式 将上面的东西模块化了
modules:{
}
})
export default store
new Vue({
el: '#app',
store, //通过组件渲染进Vue全局里面这样就可以全局使用
components: { App },
template: '
})
3.
使用mutations
this.$store.commit("increment",13); //第二个值为参数
特殊的提交风格
使用getters //相当于计算方法
$store.getters.powercount(12) //这样写就可以传参数了
getters:{
powercount(state){
return function(age){ //通过这样设置 就可以接受参数了
return age
};
}
}
action的使用方法
modules
mutation使用
csdn 最全的讲解 axios详解_Hello Simon的博客-CSDN博客
1.基本实现方法
//1.执行GET请求
import axios from 'axios'
axios.get('/user?ID=12345') //返回的是一个Promise
.then(res=>console.log(res))
.catch(err=>console.log(err));
//2.可配置参数的方式
axios.get('/user',{
params:{
ID:12345
}
}).then(res=>console.log(res))
.catch(err=>console.log(err));
2.并发方法 加上
//发送多个请求(并发请求),类似于promise.all,若一个请求出错,那就会停止请求
const get1 = axios.get('/user/12345');
const get2 = axios.get('/user/12345/permission');
axios.all([get1,get2])
.then(axios.spread((res1,res2)=>{
console.log(res1,res2);
}))
.catch(err=>console.log(err))
axios.spread /可以将数据结构为res1 ,res2
axios.spread((res1,res2)=>{
console.log(res1,res2);})
3.可用axios,create([config])来创建一个新的实例,并设置相关属性
const instance = axios.create({
baseURL: 'http://localhost:3000/api/products',
timeout: 1000,
headers: {'X-Custom-Header':'foobar'}
});
//instance的使用
instance.get('/user',{
params:{ID:12345}
}).then(res=>console.log(res))
.catch(err=>console.log(err))
//添加一个请求拦截器
axios.interceptors.request.use(config=>{
//在请求之前做一些事
return config; //!!!!!!必须return要不报错
},err=>{
//请求错误的时候做一些事
return Promise.reject(err);
});
//添加一个响应拦截器
axios.interceptors.response.use(response=>{
//对返回的数据做一些处理
reutrn response; //!!!!!!必须return要不报错
},err=>{
//对返回的错误做一些处理
return Promise.reject(err);
});