宸犀

导航

Vue总结

vue简介

	vue是一款mvvm做单页面应用的渐进式js框架

vue的使用

1.

<div id="app">

<p>{{msg}}</p>

<input type="text" v-model="msg">

</div>

2.

<script>
new Vue({

  el:"#app",

  data:{msg:"你好"}

})
</script>

vue模板标签

{{}} :可以理解为可执行简单js解析data数据的地方

v-text :把data数据显示出来

v-html: 把data数据显示出来(解析HTML字符串)

v-bind:属性 绑定html标签属性 (v-bind可以省略)

v-bind:”title=“ti”  =  :title="ti"

条件渲染

v-show=“表达式”:当表达式为真显示,为假不显示

v-if=“表达式”  v-else:当表达式为真显示,为假不显示

v-show 通过css的方式隐藏

v-if 通过移除html标签隐藏

列表渲染

<p v-for="(item,index) in list" :key="index">{{index+1}} ---{{item}}</p>

循环显示列表元素

事件绑定

v-on:事件名称   v-on:click="show"

@:事件名称  @click="show"
事件修饰符

定义:修饰事件处理

事件修饰符:

.once

.stop:停止事件冒泡

body>div>p>button

事件从最小元素发生逐级向上冒泡通知事件

.stop停止事件

.prevent

a默认有跳转到链接事件

.prevent阻止默认事件
### 按键修饰符

.enter:回车键被触发

.left/.right/.up/.down

.esc

.space

表单绑定 V-model

text:通常是字符串

checkbox:
	
	1.不给值:选中为true  不选中为false加粗样式
	
	2.给值-一组:data数据绑定为一个数组

radio:

单个值(name属性)

:disabled=""

表单不可用 布尔值

实例属性

el:vue模板范围

data:vue数据存放中心

methods:vue方法存放中心

computed:定义:从现有数据计算出新的数据

computed{

              olist(){ return this.list.filter(item=>item.age>18);}

            }

watch:定义:实时检测一个数据的变化,只要数据发生任何改变,都能检测

watch:{

"检测的数据名":{

handler:function(nval,oval){//数据变化时的操作}

}}

created:数据在模板里渲染完毕,组件创建完毕 回调函数

directive指令:定义:能让我们获取当前指令所在的html元素

模式:inserted/bind/updated/默认bind和updated

myfocus:function(el,obj){

//el指令所在的html标签

//obj.value指令的值

}

调用 v-focus="flag"

vue动画

transition:动画指令

1.name动画的名称

2.mode:动画模式 先进(in-out)还是先出()

3.enter-action-class:进入时调用类名

4.leave-action-class:离开时调用类名

transition-group:动画组指令

1.定义:在动画指令里面,如果有元素的显示或隐藏会自动添加相应的类名

动画组-需要指定key
默认class名

1.v-enter-active 进入过程

v-enter

进入初始状态

v-enter-to

进入结束状态

2.v-leave-active 离开过程

v-leave

离开初始状态

v-leave-to

离开结束状态
css
关键帧动画

定义动画

@keyframes fadeIn {

        from{opacity: 0;}

        to{opacity: 1;}

    }

调用动画

animate:fadeIn 1s ease;

过渡动画

定义:从一个状态过渡到另一个状态

transition:过渡的属性 过渡时间 缓动函数

transition:all 1s ease
transfrom 转换

scale 缩放

translate(x,y)位移

skew(deg)倾斜

rotate(deg)旋转
组件
定义与使用

定义

let child={template:'<div>...</div>'}

注册

components:{child}

使用

当html标签
<child></child>

<child></child>

组件的数据

data:function(){return {num:1}}
组件的传参(父向子)

默认数据&数据类型限定

props:{

"pnum":{default:1,type:[String,Number,Boolean,Array]}

}

调用组件的时候 用属性方式传递

<child :pnum="5">

在组件内部接受参数

props:["pnum"]

当数据使用了单项数据流

解释:父亲组件传递给子组件的数据 需要只读(父亲的数据可能传递给多个子组件的)

需要修改父亲传递过来的数据呢

定义数据:data:function(){return{num:0}}

接受父亲的数据props:{"pnum"}

重新赋值定义好的数据created(){this.num=this.pnum}
组件的插槽

作用:可以让组件产生嵌套关系

使用
1.定义child组件用 template=“<div><slot></slot></div>”

2.调用组件<child>中间的内容会被放入组件template里面的slot标签里</child>
命名插槽
作用:特殊的内容去特殊的位置

使用

1.在嵌套时

<h1 slot="title">

<p slot="foot">

组件内部接收

<slot name="title">

<slot name="foot">

<slot></slot>

没有命名默认会被放入slot标签里面

cmd

切换磁盘:磁盘名:  d:

cd: 切换目录

/ 根目录,../上级目录,cd目录名:cd Users

dir 查看当前目录和文件

上下箭头 命令历史记录

md 创建文件夹

cls 清屏

ipconfig 查看当前ip

ping 主机名 查看和另外一台电脑是否联通

help 帮助文档

ctrl+C 强制结束

json方法

对象转字符串

JSON.stringify(obj)

字符串转对象

JSON.parse(str)

本地存储

localStorage.setItem(k,v)

存-字符串

localStorage.getItem(k)

路由

cli-方式写组件

组件的构成

模板

template

业务逻辑

script

样式

style
样式组件的使用
1. 创建组件.vue

2. 导入并注册组件

3. 使用组件

路由与视图

页面.vue

配置 router.js
路由对应的地址
	path:"/cart"
路由的名称
	name:“cart”
路由地址对应的组件
	component:Cart

路由指令

路由链接(切换路由)

	router-link

切换的地址

	to="路由地址"

路由视图显示 url对应的组件的

	router-view

路由的参数

1. router.js配置

	 path:"/product/:id"

2. 组件内部获取到参数

	{{$route.params.id}}

路由编程跳转

返回

$router.go(-1)

$router.back()

跳转

$router.push("/")

$router.push("/cart")

$router.replace("/cart")

跳转页面不留历史记录
目标

购物车页面

cart.vue

存放页面内容

router.js

配置购物车  /cart

切换路由的指令

<router-link :to="/cart">购物车</router-link>

vue中使用ajax

1. 安装

	cmd下安装,安装到项目下
	yarn add axios

2. 挂载到vue

	import axios from ‘axios’

	Vue.prototype.$http = axios

3. 使用

	this.$http.get(url)
	
	.then(res=>{
	
	})

目标 模拟段子app

说明:咱们后端同header 头信息 允许跨域

目标

点完更多加载新的一页

getJok()
1. url 要动态传入参数page

2. 数据jok 和以前的合并 concat

3. 更新数据page++

上线 打包

yarn build

项目目录下会多一个 dist

vue组件的生命周期

定义:一个组件从创建到销毁会经历多个步骤,把这些步骤称为组件的生命周期

组件的每个生命周期都会,触发固定的回调函数,我们把回调函数称为 生命周期钩子函数

生命周期

创建前后

created()

创建完毕

做一些初始化

beforeCreate

创建完毕前

渲染前后

mounted

第一次渲染完毕

html DOM已经渲染 操作页面中的元素

beforeMount

渲染完毕前

更新前后

updated

更新完毕

beforeUpdate

更新前

销毁前后

destroyed

销毁完毕

beforeDestroy

销毁前

导航守卫

组件内部守卫

定义:当进入页面或离开页面进行判断

进入页面

重定向别的页面

额外的事情

beforeRouterEnter

路由进入前

to

要进入的路由

from

从哪个路由来的

next

将要去哪儿

next 必须要被调用

beforeRouterLeave

路由离开前

路由配置 全局守卫

beforeEach

路由独享守卫

beforeEnter

需求

1. 设置购物车页面需要登录 才可以访问

2. 如果没有登录 跳转到登录页面

3. 在登录页面登录成功,跳转到 它之前进入的页面

实现登录

1. 登录接口

1. 编写 login.vue 页面

发起登录

2. 发送数据

3. 保持登录会话

	目标 用户页面 注销&登录
	user.vue 用户页面
注销

用户信息展示
登录保持

cookie存储

https://github.com/js-cookie/js-cookie

localStorage存储

注册

regist.vue

注册成功跳转登录

注册成功-后端实现登录

跳转到首页、用户页面
案例:小米商城
1.目标

获取首页数据,渲染出来

页面缓存

缓存组件 <keep-alive>
特别组件需要缓存  meta:{keepalive:true}
组件间通信

1. 父传子

a, 父组件通过属性方式传入

	<swiper  :gallery="galleryPic"/>
	
	data(){return {galleryPic:[...]}

b , 子组件通过props 方式接收

	props:["gallery"]

2. 子获取父亲的data数据

	this.$parent.showTab

3. bus方式传递

(不论,父子还兄弟,还是子父)

1. 定义 bus.js

	import Vue from ’vue‘
	
	export default new Vue();

2. 如果要获取数据

	import bus from "bus.js"
	
	bus.$on(事件名,data=>{  // data 就是数据名称})

3. 如果要发送数据

	import bus from "bus.js"
	
	bus.$emit("事件名",数据)

4.子传父

	<swiper @swevent="处理函数($event)" / >
	
	<swiper @numchange = “changeHd($event)”/>
	
	methods:{
	
	changeHd(e){
	
	  // e 就是swiper 传递过来的数据 15
	
	    }
	
	}
	
	this.$emit("numchaneg",15)

5. 路由传递

	 params

配置

	{path:"/product/:id"}

获取

	{$route.params.id}

	query

	push("/login?redirect=/about")

获取

	$route.query.redirect

6. vuex(最高级)

组件的缓存

1. 定义元信息 .router/index.js

	{name:"cart",
	
	meta:{keep:true}}

2. keep-alive进行缓存

	:include="'cart'"
	
	<keep-alive>
	
	  <router-view  v-if="$route.meta.keep"/>
	
	</keep-alive>
	
	<router-view  v-if="!$route.meta.keep"/>

jsonp数据

axios 不支持jsonp

jsonp的原理?

为什么jsonp ?ajax 请求有同源测试

经常需要跨域名请求数据

后端允许 Access-Control-Allow-Origin:*

后端允许 函数名(数据)

  jp({name:"mumu",age:18})

	<script src="数据的地址">
	
	(调用方法)
	
	前端先定义一个方法
	
	function jp(data){
	
	  console.log(data);
	
	}
	
	(定义方法)
	
	jsonp使用步骤
	
	1. 安装jsonp
	
	yarn add jsonp
	
	2. 导入jsonp
	
	import jsonp from 'jsonp'
	
	3 jsonp方法
	
	jsonp(url, opts, fn)
	前端项目
	
	基本nodejs
	
	xxx.vue  xxx.js  xxx.css
	
	webpack 服务
	
	1.打包分离 压缩
	
	跨域-代理跨域
	
	请求地址-本地服务-获取文件->目标浏览器
	
	1. 在项目目录 配置一个 vue.config.js
	
	module.exports = {
	
	    devServer: {
	
	        /**
	
	        * 这一块是devServer的配置,可以参考https://webpack.js.org/configuration/dev-server/
	
	        * (可选,根据自己情况来设置)
	
	        */
	
	        open: true, //浏览器自动打开页面
	
	        host: "localhost", //本地服务器访问的路径
	
	        port: 8080, //本地服务器访问的端口
	
	        /**
	
	        * vue-cli3跨域的全配置!
	
	        */
	
	        proxy: {
	
	            /**
	
	            * (推荐这种方式)
	
	            * 这里是域名后面需要访问的部分(最原始的跨域方式!),!
	
	            * 跨域域名https://baike.baidu.com/后面的访问目录!
	
	            * 在axios路径中写入/article目录下要访问的具体内容路径即可,如果:/article/d4666d640e2e478d283d8c7f.htm即可
	
	            *
	
	            */
	
	            '/motor': {
	
	                //你要跨域的域名(包含host、端口号,切记:一定要带上http头);
	
	                //同一个域名只能设置一次跨域,否则重复报错!
	
	                target: 'https://m.dcdapp.com',
	
	                changeOrigin: true, //是否跨域,设置为true;(必须)
	
	                /* 对应的axios路径设置:
	
	                axios.get( "/motor/d4666d640e2e478d283d8c7f.htm" )
	
	                    .then( function ( response ) {
	
	                        console.log( response.data );
	
	                    } )
	
	                    .catch( function ( error ) {
	
	                        throw error;
	
	                    } );
	
	                */
	
	            }
	
	        } 
	
	    },
	
	    publicPath: './'
	
	}

商品内容

product.vue

this.$http.get("http://biger.applinzi.com/product.php?id="+this.$route.params.id)

category.vue

@click="$router.push('/product/'+product.action.path)"

router/index.js

path: '/product/:id',

posted on 2019-11-14 20:27  宸犀  阅读(122)  评论(0编辑  收藏  举报