VUE学习笔记 第一遍

语法模板

new vue({
el:"绑定的标签" //element
data:{
//定义变量的地方
myname:"aaaa", //状态
myage:100
},
methods:{
//定义方法的地方
functionname(){
this.myname="bbb" //this表示当前实例
}
},
computed:{
//计算属性
functionname(){
}
},
watch:{
//监听状态的改变


}
})

语法

指令v-show
<button v-show="isshow">ture,显示,false,隐藏</button>
v-if
<button v-if="isshow">ture,创建,false,删除</button>
v-bind: 动态绑定
<div v-bind:class = "isture?"yellow":"red"">
动态切换class
</div>
@click v-on
<--动态绑定事件-->
<button @click="functionname()"> </button>
<button v-on:click="functionname">点我</button>
v-for 遍历数组的指令
<li v-for="item in datalist">//也可以item of datalist
{{item}}
</li>
v-for扩展
<li v-for="(data,index) in list">
数组中data和index,值和序列
</li>
<li v-for="(data,key,index) in obj">
数组中data和key和index,键、值、序列
</li>
v-model 双向绑定
<input type="text" v-model="mytext"/>
v-html 解析html代码
<div v-html="myhtml"></div>

二、class&&style的对象写法

<div id="id" :class="classname">
class的对象写法
</div>

var vm = new Vue({
el:"#id",
data:{
classname:{
aa:ture, //ture添加class,false删除class
bb:ture,//加入事先为定义的其他class,需要使用Vue.set(vm.classname,"dd",ture)
cc:ture
},
classarr:["aa","bb"]//删除push("dd") 添加splice("dd")
}
})


<div :class="classarr">
class数组写法
</div>
<div :style="styleobj">
style对象写法
</div>
<div :style="stylearr">
style数组写法
</div>

var vm =new Vue({
el:"#id",
data:{
styleobj:{
backgroundColor:"red"
},
stylearr:[{
backgroundColor:"red"
}]

}
})

三、条件渲染 v-if v-else v-else-if

<li v-for="data in list">
<div>
{{ data.name }}
</div>
<div v-if="data.stat===0">
未发货
</div>
<div v-else-if="data.stat===1">
已发货
</div>
<div v-else="data.stat===2">
已完成
</div>
</li>
var vm =new Vue({
el: "#div",
data: {
list:[
{
name:'111',
price:000,
stat:0
},
{
name:'222',
price:000,
stat:0
}
]
}
})

包装环境 template

<template v-if="iscreat"><div>111</div><div>111</div><div>111</div></template>

四、事件处理器

<button @click="function">
自动传事件对象
</button>
<button @click="function($event,2)">
手动传事件对象并自定义参数
</button>
<button @click="num++">
直接写代码
</button>

new Vue({
el: "#box",
data: {
num:0
},
methods: {
function(evt){
this.num++;
}
}
})

阻止冒泡
原生js:

evt.stopPropagation();

vue:

<li @click.stop="function">
stop阻止冒泡
</li>
<div @click.self="function">
self只有当事件源是自己的时候才会触发
</div>

其他的修饰

.once 只触发一次
.capture 捕获阶段触发
.prevent 拦截默认行为
.passive 不拦截默认行为,一般移动端使用

按键修饰符

.enter 按下enter键才能执行

五、表单控件绑定

多选

<input type="checkbox" v-model="checkgroup" value="vue"/>vue
<input type="checkbox" v-model="checkgroup" value="react"/>react
<input type="checkbox" v-model="checkgroup" value="js"/>js
//只有一个绑定一个布尔值

new Vue({
el:"#box",
data:{
checkgroup:[] //双向的
}
})

单选

<input type="radio" v-model="checkgroup" value="vue"/>vue
<input type="radio" v-model="checkgroup" value="react"/>react
<input type="radio" v-model="checkgroup" value="js"/>js

表单修饰符

v-model.lazy //失去焦点
v-model.number //转换为number类型
v-model.trim //去首尾空格

异步响应axios

github引入axios

github访问axios项目,项目下有引入的链接,也可以通过链接下载到本地引入。
引入之后,在vue中直接调用

new Vue({
methods:{
get
function(){
axios.get("资源路径").then(res=>{
res.data;
//res是一个请求大对象,里面的data属性才是真实的数据
})
}
post
function(){
axios.post("路径",{
写对像属性
}).then(res=>{
console.log(res);
});
}
}
})

组件化

语法

Vue.component("组件名称",{
template:'
<div>
<button @click="handleback"></button>
组件的html代码
</div>
',//模板
methods:{
//组件的js逻辑
handleback(){
},
handlehome(){
}
}
})

全局组件自定义组件中data必须是一个函数,只能写行内样式,只能包含一个根节点,无法直接访问其他组件的状态和方法。

data(){
return{
name:"aaa"
}
}

局部组件

Vue.component("组件名称",{
template:'
<div>
<button @click="handleback"></button>
组件的html代码
<name></name>
</div>
',//模板
components:{
"name":{
template:'
局部组件
'
}
}
})

组件之间的通信

父传子

Vue.component("组件名称",{
template:'
<div>
<button @click="handleback"></button>
组件的html代码
</div>
',
props:["父传子在这里接收"],
props:{
对象写法
mytitle:String,
isshow:Boolean
},
props:{
mytitle:{
type:String,
default:true
}
}
})



//根组件
new Vue({
el:"#box",



})

子传父

<div id="box">
<child @aaa="handel"></child>//父在子绑定回调函数
</div>

Vue.component("child",{
data(){
money:10000
},
template:'
<div>
<button>
</button>
</div>
',
methods:{
give(){
this.$emit("aaa",this.money);//子触发方法,调用回调函数,值就会传给父组件定义的回调函数
}
}

})

new Vue({
el:"#box",
methods:{
handel(){
//父节点定义的函数,会传给一个字组件的值
}
}
})

refs

<div ref="mydiv">
</div>
通过ref可以获得dom节点以及组件,实现父组件操作子的属性
Vue({
methods:{
handel(){
this.$refs.mydiv;
}
}
})

中间人模式,兄弟组件通信

子传父,再父传子

bus通信总线

bus.$on bus.$emit
var bus = new Vue();//空的vue实例
Vue.component("child1",{
template:'
<div>
发布者
</div>
',
methods:{
handel(){
bus.$emit("aaa","data");
}
}
})
Vue.component("child2",{
template:'
<div>
订阅者
</div>
',
//dom创建完之后会自动触发mounted()方法
mounted(){
bus.$on("aaa",(data)=>{
console.log("aaa");
})
}
})

修改属性

属性是父传给子的,子修改属性,父会产生歧义,建议修改状态。
v-once在组件中的作用
v-once的模板不能修改,静态页面v-model

<div id="box">
            <zujian type="text" title="姓名" v-model="username" ></zujian><!-- v-model注册了一个input事件监听,触发之后函数会自动修改绑定的值 -->
            <button type="reset" @click="cle()">清空</button><button type="submit" @click="sub()">提交</button>
        </div>
        
        <script>
            
            Vue.component('zujian',{
                props:["type","title","value"],//v-model会自动给组件传value
                template: '<div><label>{{title}}</label><input :type="type" :value="value" @input="child"/></div>',
                methods:{
                    child(evt){
                        //组件修改了值,通过$emit方法通知父,父同步username的值
                        this.$emit("input",evt.target.value);
                    }
                }
            })
            
            var vm =new Vue({
                el:"#box",
                data:{
                    username:"default"
                },
                methods:{
                    sub(){
                        console.log(this.username);
                    },
                    cle(){
                        this.username="";
                    }
                }
            })
            
        
                
        </script>

动态组件

<keep-alive>
<component :is="动态绑定组件"></component>
</keep-alive>
 

slot(插槽)

<div>
<aaa>
<div slot="a">
通过name属性可以将dom插入组件不同位置
</div>
<div slot="b">
通过name属性可以将dom插入组件不同位置
</div>
</aaa>
<---->旧版插槽</---->
</div>


Vue.component("aaa",{
template:'
<div>
<slot name="b"></slot>
child
<slot name="a"></slot>
</div>
',


})
<div>
<aaa>
<template v-slot:a>
<div>
通过name属性可以将dom插入组件不同位置
</div>
</template>
<template v-slot:b>//v-slot:   =====   #
<div>
通过name属性可以将dom插入组件不同位置
</div>
</template>
</aaa>
<---->新版插槽</---->
</div>


Vue.component("aaa",{
template:'
<div>
<slot name="b"></slot>
child
<slot name="a"></slot>
</div>
',

transition 单个元素过渡

.aaa-enter-active{
样式
}
.aaa-leave-active{
样式
}

//创建和消失的时候会自动找.aaa-enter-active和.aaa-leave-active
<transition name="aaa" appear>//appear初始动画效果
<div v-show = "ishow">
111111111
</div>
</transition>

多个元素过渡加key值transition-group
必须加key值,v-for必须加key值 :key=“value”

<transition-group name="name" tag="ul"></transition-group>//默认实例化为span,也可以使用tag属性定制

可复用过渡将标签写入组件中即可

生命周期

beforeCreate()//创建前

created() //创建完成

beforeMount() // 挂载前

mounted() //挂载后

beforeUpdate() //更新前
updated() //更新后

swiper

new Swiper(".class",{
loop:true,//重复
direction:"vertical"//垂直轮播
})

动态swiper

swiper初始化要放在updated中

swiper组件

<aaa :key="length">
<div>
内容
</div>
</aaa>

Vue.component("aaa",{
template:'<div>
<slot></slot>//使用插槽
</div>',
mounted:{
new Swiper("",{

})
}

})

自定义指令

<div v-aaa="'red'">
</div>

语法定义
Vue.directive("指令名(aaa)",{
//指令的生命周期 1
inserted(el,binding){
绑定指令的标签插入父节点就会执行
el.style.background=binding.value
},
//更新时
update(){
el.style.background=binding.value
}
//第一次绑定
bind(){

}
//解绑
unbind(){

}
//更新完成之后
componentUptated(){

}
})

nextTick

this.$nextTick(){

}

过滤器

Vue.filter("name",function(参数){

})

vue—路由

路由懒加载

{
path: '/center',
component: ()=>import('../views/center.vue')
},

路由拦截器

router.beforeEach((to, from, next) => {
// ...
if(判断){

}else{
next() //放行
}
})

反向代理

vue.config.js 中的 devServer.proxy 选项来配置。
module.exports = {
devServer: {
proxy: {
'/api': { //以什么开头的路径来反向代理
target: '<url>',//目标域名
ws: true,//是否更改域名
changeOrigin: true
},
'/foo': {
target: '<other_url>'
}
}
}
}

Router实战

import Vue from 'vue'
import VueRouter from 'vue-router'
// 导入组件
import Film from '../views/Film.vue'
import center from '../views/center.vue'
import user from '../views/user.vue'
import naver from '../views/film/naver.vue'
import detail from '../views/detail.vue'
// 注册模块
Vue.use(VueRouter)

const routes = [
  {
    path: '/film',
    component: Film,
	children:[
		{
			path:'naver',
			component:naver
		},
		{
			path: "",
			redirect: '/film/naver'
		}
	]
  },
  {
    path: '/center',
    component: center
  },
  {
    path: '/user',
    component: user,
  },
  // 重定向
  {
    path: '*',
    redirect: '/film'
  },
  {
	  path: '/detail/:id',//动态路由跳转
	  component:detail,
	  // name:'myrouter' //名字跳转
  },
/*  {
  	  path: '/detail',//query路由跳转方式
  	  component:detail,
  } */
]

const router = new VueRouter({
	mode:'history',//hash带#
	routes
})

export default router

Store

import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'
Vue.use(Vuex)

export default new Vuex.Store({
//公共资源定义
  state: {
		filmList:[]
  },
	//同步请求
  mutations: {
	  setlist(state,data){
			state.filmList=data  
	  }
  },
	//异步请求
  actions: {
	  getlist(store){
		  console.log("发送ajax")
		  axios('http://localhost:8081/base/salestoday').then(res =>{
		  	console.log("数据",res)
			store.commit('setlist',res.data)
		  }) 
	  }
  },
  modules: {
  }
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值