Vue笔记

Vue中所有的配置文件修改以后,需要重新启动项目
#项目初始化
vue init webpack name()
1.安装vue-cil
npm install -a vue cli
2.初始化项目
vue init webpack my-project
3.进入项目
cd my-project
4.安装依赖
npm install
5.启动项目
npm run dev

#项目目录结构
index.html 项目根视图
.postcssrc.js postcss配置文件
static 静态文件目录

#模板语法

Vue组件
包含三个部分
template:视图
script:逻辑部分
style:样式部分

Mustache:模板
表现形式:{{语法}}

Vue基本指令:
v-html: 渲染文本
v-text: 渲染文本
v-bind: 绑定数据 可简写(:)

列表渲染:
v-for 列表循环的时候一定要key 不然会警告

事件监听:
v-on
@keyup.enter 监听指定按键 回车
对象都放在methods里面
methods:{}

事件参数
修饰符
.stop 阻止事件冒泡
.prevent 阻止默认事件
.once 事件只生效一次

数组更新检测:
变异方法:引起视图更新
替换数组:不会引起视图更新

计算属性
计算属性和methods区别
计算属性取缓存
methods 每次都重新调用

表单输入绑定
v-model 双向数据绑定
表单修饰符
v-model.lazy 失去焦点才触发
v-model.number 用户输入内容转化数字类型
v-model.trim 自动过滤用户输入的首位空格

methods:{}

computed:{} 计算属性,计算属性是基于依赖进行缓存的,而methods每次都重新执行
watch:{} 实时监听一个函数

页面主要布局组件

一、三个部分组成
1、template
2、script
3、style
scoped
二、子父级组件

子父级组件交互(通信)
父->子 子页面用props接收
子->emit Event

数据传递类型限制(验证)
数据类型验证
多数据类型验证
必选项
默认值
obj、arr数据类型的默认值

1.单文件组件
三个部分组成
1、template
只能存在一个根元素
2、script
3、style
scoped:样式只在当前组件内生效

子父级组件:
交互(通信)
	父=》子
	数据类型传递类型限制
		数据类型验证(type)
		必选项(required)
		默认值
		obj/arr数据类型默认值需要function return  默认值

	子=》父
		$emit
		
		
	3.插槽
		单个插槽。
		具名插槽
		
	4.作用域插槽
	数据是子传父的
		
	5.动态组件
		keep-alive
		什么情况下使用缓存:

css过渡与动画
1.class的操作
2.animate第三方库的引用

	过渡类名:
	v-enter:进入开始
	v-enter-active:执行过程中
	v-enter-to:结束动画
	
	v-leave:离开
	v-leave:-active:离开过程
	v-leave-to:离开结束

css 动画
可以使用第三方css动画库,如Animate.css

自定义指令 v-name (标签里定义)

	全局指令:
	Vue.directives("name",{
	inserted:function(value){
	return if(value == 1){
		value == 0 
	}
	return value
	}
	
	})
	
	局部指令:directinve:{
		fouce:{
		inserted:function(value){
		return if(value == 1){
			value == 0 
		}
		return value
	}
		
	}
	
	
	}
	
过滤器 	直接在花括号里面引用过滤器名称即可

filters


axios:
	1.安装 npm install axios 
	2.引入加载
	 import  axios from ''
	
	挂载原型上
	Vue.prototype.$axios = axios
	
	3.请求(GET)
		this.$axios("http://www.wwtliu.com/sxtstu/news/juhenews.php",{
  		params:{
  			type:"junshi",
  			count:30
  		}
  	})
	 .then(res=>{
	 	 	 console.log(res.data.result.data)
	 		this.newData = res.data.result.data
	 })
	.catch(error=>{
		console.log(error)
	})
	请求(POST)
	注意:axios接收的post请求参数的格式是form-data格式
	数据格式转化	
		import qs from "qs"
		qs.stringify{
		}
		
Axios 全局的默认值
	Axios.defaults.baseURL = '请求的域名';//其他地方请求地址可以省略域名 
	Axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;//第三方认证涉及到token 如果没有可以干掉
	Axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';// 全局设置post请求的数据编码格式

拦截器:
	在请求或相应then 或者catch处理前拦截它们
			// 添加请求拦截器
	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);
	  });
	  
	  
跨域处理:
注意:定义的默认的全局域名必须注释
修改config中的index.js文件
 // 第一步替换他的地址
proxyTable:{
"/api":{
target:"http://localhost:8080", 
changeOrgin:true,
pathRewrite:{
'^/api':''
	}
}

}
//第二步
修改main.js声明;添加HOST代理(读取HOST相当于读取config里面index.js中的proxyTable 中target的地址)
Vue.prototype.HOST = ‘/api’

Mock:数据模拟
	1.自己创建JSON文件。使用get请求形式访问数据
	方便、快捷
	2、项目中集成服务器,模拟各种接口
	优点:模拟真实线上环境
	缺点:增加开发成本
	3.直接使用线上数据
	优点:真实
	缺点:不一定每个项目都存在
	

路由基本加载	(vue-router)
如果一个模块化工程中使用它,必须要通过Vue.use明确的安装路由功能
1、npm install --save vue-router   (路由安装)
2、引用(main.js)
import router from "vue-router"    引入	
Vue.use("router") 			挂载


var router = new Vuerouter({
	routes:[
	{
			path:"/",
			component:HelloWorld
		}
	]
		
})

new Vue({
  el: '#app',
  components: { App },
  router,
  template: '<App/>'
})

视图加载的位置
 <router-view></router-view>
 
 
跳转(导航)
<router-link to="/Ninserted">helloword</router-link>


路由嵌套:只需要在路由设置文件里面给他添加children数组
children:不用加斜杠只需要写组件名称即可
添加子路由地址注意:必须写	全部路径	
<router-link to="/index/java">helloword</router-link>

自动识别组件里的router-view 标签

路由传递参数:
1.需要在路由设置的path后面写入传递参数的名称。示例:path:"index/:count/:type" 
2.需要在页面的route-link to="{name:'跳转页路由的名称',params:{count:10,type:obj}}" 可以传递对象。
3.需要跳转后的页面接收 {{$route.params.count}} ||{{$route.params.type.name}} 

linkActiveClass:定义高亮样式名称。(全局)
理由高亮:mode:history(浏览器所有历史记录)
hash:url hash  值作为路由,支持所有浏览器,包括不支持html5 的history
history:history.back()(浏览器只返回上一级)


Element-ui(安装组件)
1.npm i element-ui -s

2.安装按需加载的依赖
npm install babel-plugin-component -D

3.修改.babelrc文件

{

“presets”: [
[“env”, {
“modules”: false,
“targets”: {
“browsers”: ["> 1%", “last 2 versions”, “not ie <= 8”]
}
}],
“stage-2”
],
“plugins”: [“transform-vue-jsx”, “transform-runtime”,[“component”, [
{
“libraryName”: “element-ui”,
“styleLibraryName”: “theme-chalk”
}
]]]
}

4.进入组件
按需引入
import { Button, Select } from ‘element-ui’
Vue.use(Button)
Vue.use(Select)

Swiper组件安装
https://www.swiper.com.cn/

懒加载插件安装
地址:https://github.com/hilongjw/vue-lazyload
import VueLazyload from ‘vue-lazyload’

Vue.use(VueLazyload)

imgObj: {
src: ‘http://xx.com/logo.png’,
error: ‘http://xx.com/error.png’,
loading: ‘http://xx.com/loading-spin.svg’
},

安装less
1、在文件webpack.base.conf.js里面rules添加
{
test: /.scss$/,
loaders: [“style”, “css”, “sass”,“style-loader!css-loader!less-loader”]
}

  1. 装style-loader
    命令:npm install --save-dev style-loader css-loader

package-lock.json 可以查看是否安装成功

注意style里面必须 type=“text/less” 在style标签如此引入

手机端注意先引入以下代码:(手机端直接用框架)

判断是PC端还是移动端:

 (function (doc, win) {
        var docEl = doc.documentElement,
                resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
                recalc = function () {
                    var clientWidth = docEl.clientWidth;
                    if (!clientWidth) return;
                    if(clientWidth>=750){
                        docEl.style.fontSize = '100px';
                    }else{
                        docEl.style.fontSize = 100 * (clientWidth / 750) + 'px';
                    }
                };

        if (!doc.addEventListener) return;
        win.addEventListener(resizeEvt, recalc, false);
        doc.addEventListener('DOMContentLoaded', recalc, false);
    })(document, window);
  
  
VueX
如果不构建大型项目不建议使用VueX
view ->(dispatch) Action ->(Commit) Mutations ->(Mutate) State -> View
注意:Action 不是必需品,如果有异步操作才可能用到Action,否则可以不适用

安装VueX
命令:npm install vuex --save

import Vuex from 'vuex'
Vue.use(Vuex)
在main.js里面创建一个store仓库
const store = new Vuex.Store({
state:{
	count:150,
},
})

任何其他组件页面接收:]
view层:{{getCount}}

computed:{
	getCount(){
	this.$store.state.count
}

}

mutations  绝对不可以异步方法,必须是同步 

3.Actions  (网络请求需要用actions)
使用形式通过
this.$store.dispatch("Actions")  调用mutations里面的方法进行触发

actions 提交的是mutation,而不是直接变更状态
actions 可以包含任何异步操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

画不完的饼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值