Vue简单入门

Vue入门

  • el:
    类型:string|HTMLElement
    作用:决定之后Vue实例会管理哪一个DOM
  • data:
    类型:Object|Function
    作用:Vue实力对应的数据对象
  • methods:
    类型:{[key:string]:function}
    作用:定义属于Vue的一些方法,可以在其他地方调用,也可以在指令中使用

vue初体验

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="app">{{message}}</div>
		
		<script>	
		    const app = new Vue({
		        el:'#app',
		        data:{
		            message:'hello world',
		        }
		    })
		</script>
	</body>
</html>

vue列表的展示

<!DOCTYPE html>
<html>
   <head>
   	<meta charset="utf-8" />
   	<title></title>
   	<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
   </head>
   <body>
   	<div id="app">
   	<ul>
   		<li v-for="item in movies">{{item}}</li>
   	</ul>
   	</div>
   	
   	<script>	
   	    const app = new Vue({
   	        el:'#app',
   	        data:{
   				movies:['大头儿子小头爸爸','西游记','孙悟空','红楼梦']
   	        }
   	    })
   	</script>
   </body>
</html>

计数器

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="app">
		<h2>当前点击次数:{{counter}}</h2>
		<!-- <button v-on:click="counter++">+</button> -->
		<!-- <button v-on:click="counter--">-</button> -->
		
		<button v-on:click="add">+</button>
		<button v-on:click="sub">-</button>
		
		<!-- 语法糖写法 -->
		<button @click="add">+</button>
		<button @click="sub">-</button>
		</div>
	
		<script>	
		    const app = new Vue({
		        el:'#app',
		        data:{
		            counter:0
		        },
				methods:{
					add:function(){
						console.log("add被执行")
						this.counter++
					},
					sub:function(){
						console.log("sub被执行")
						this.counter--
					}
				}
		    })
		</script>
	</body>
</html>

v-once,v-text,v-html的使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
	    <div id="app">
			<div>{{message}} 前端修改会变化(app.message='修改')</div>
			<div v-once>{{message}} 前端修改不会变化(app.message='修改')</div>
			<div v-text="text"></div>
			<div v-html="url"></div>
		</div>
	
		<script>
			const app = new Vue({
				el:'#app',
				data:{
					message:'你好',
					url:'<a href="https://www.baidu.com">百度一下</a>',
					text:'测试'
				},
			});
		</script>
	</body>
</html>

动态属性绑定

  • v-bind的基本使用
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
	    <div id="app">
			
			绑定输入框
			<input type="" name="" id="" v-bind:value="message" />
			<br>
			绑定URL
			<a v-bind:href="url">百度</a>
			<br>
			
			---------------------简写去掉v-bind
			<br>
			绑定输入框
			<input type="" name="" id="" :value="message" />
			<br>	
			绑定URL
			<a :href="url">百度</a>
		</div>
		
		<script>
			const app = new Vue({	
				el:'#app',
				data:{
					message:'登录',
					url:'https://www.baidu.com',
				}
				}
			});
		</script>
	</body>
</html>

  • v-bind的动态绑定class(对象语法)
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<style>
		.Active{
			color: red;
		}
	</style>
	<body>
	    <div id="app">
			<h2 class="titile" v-bind:class="{Active:isActive,Line:isLine}">{{message}}</h2>
			<button v-on:click="btnClick">按钮</button>
		</div>
		
		<script>
			const app = new Vue({	
				el:'#app',
				data:{
					message:'登录',
					url:'https://www.baidu.com',
					isActive:true,
					isLine:true
				},
				methods:{
					btnClick: function(){
						this.isActive = !this.isActive;
					}
				}
			});
		</script>
	</body>
</html>
  • v-bind的动态绑定class(数组语法)
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
	    <div id="app">
			<h2 class="titile" :class="[active,line]">{{message}}</h2>
			<h2 class="titile" :class="getClasses()">{{message}}</h2>
			<button>按钮</button>
		</div>
		<script>
			const app = new Vue({	
				el:'#app',
				data:{
					message:'hello world',
					active:'11',
					line:'22'
				},
				methods:{
					getClasses:function(){
						return [this.active,this.line];
					}
				}
			});
		</script>
	</body>
</html>

小作业:点击列表中的某一项,颜色变红,其他的去掉红色

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
		<style>
			.Active{
				color:red;
			}	
		</style>
	</head>
	<body>
		<div id="app">
		<ul>
			<li v-bind:class="{Active:index==mark}" v-for="(item,index) in movies" @click="changeColor(index)">{{index}}-{{item}}</li>
		</ul>
		</div>
		
		<script>	
		    const app = new Vue({
		        el:'#app',
		        data:{
					movies:['大头儿子小头爸爸','西游记','孙悟空','红楼梦'],
					mark:-1,
		        },
				methods:{
					changeColor:function(index){
						console.log(index)
						this.mark=index
						console.log()
					}
				}
		    })
		</script>
	</body>
</html>

v-bind动态绑定style(对象语法)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
		<style>
			.Active{
				color:red;
			}
			
		</style>
	</head>
	<body>
		<div id="app">
		<ul>
			<li v-bind:style="{fontSize:fsize+'px'}" v-bind:class="{Active:index==mark}" v-for="(item,index) in movies">{{index}}-{{item}}</li>
		</ul>
		</div>
		<script>	
		    const app = new Vue({
		        el:'#app',
		        data:{
					movies:['大头儿子小头爸爸','西游记','孙悟空','红楼梦'],
					mark:-1,
					fsize:30
		        },
		    })
		</script>
	</body>
</html>

v-bind动态绑定style(数组语法)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
		<style>
			.Active{
				color:red;
			}
			
		</style>
	</head>
	<body>
		<div id="app">
		<ul>
			<li v-bind:style="[basestyle]" v-bind:class="{Active:index==mark}" v-for="(item,index) in movies" @click="changeColor(index)">{{index}}-{{item}}</li>
		</ul>
		</div>
			
		<script>	
		    const app = new Vue({
		        el:'#app',
		        data:{
					movies:['大头儿子小头爸爸','西游记','孙悟空','红楼梦'],
					mark:-1,
					basestyle:{color:'blue',fontSize:'40px'}
		        },
				methods:{
					changeColor:function(index){
						this.mark=index
					}
				}
		    })
		</script>
	</body>
</html>

计算属性的基本使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
		<style>
			.Active{
				color:red;
			}
			
		</style>
	</head>
	<body>
		<div id="app">
		<h2>{{fullname}}</h2>
		</div>
			
		<script>	
		    const app = new Vue({
		        el:'#app',
		        data:{
					name1:'王',
					name2:'隔壁的'
		        },
				//计算属性
				computed:{
					fullname:function(){
						return this.name1+this.name2;
					}
				}
		    })
		</script>
	</body>
</html>

计算属性setter和getter

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
		<style>
			.Active{
				color:red;
			}
		</style>
	</head>
	<body>
		<div id="app">
		<h2>{{fullname}}</h2>
		</div>
			
		<script>	
		    const app = new Vue({
		        el:'#app',
		        data:{
					name1:'王',
					name2:'隔壁的'
		        },
				//计算属性
				computed:{
					fullname:{
						get:function(){
							return this.name1+this.name2;
						},
						set:function(newValue){
						const name = newValue.split(' 	')
						this.name1 = name[0]
						this.name2 = name[1]
					},
					},	
				}
		    })
		</script>
	</body>
</html>
控制台调用方式
get方法:app.fullname
set方法:app.fullname = 'lao wang'

计算属性和methods对比

  1. Vue初体验
  2. 插值的操作
  3. 动态绑定属性
  4. 计算属性
  5. 事件监听
  6. 条件判断
  7. 循环遍历
  8. v-model使用
  9. 组件化开发
  10. 安装vue-router
    步骤一:安装vue-router
    npm install vue-router --save
    步骤二:在模块工程中使用
    1.导入路由对象,并调用Vue.use(VueRouter)
    2.创建路由实例,并且传入路由映射配置
    3.在Vue实例中挂载创建的路由实例
    使用vue-router
    1.创建路由组件
    2.配置路由映射:组件和路径映射关系
    3.使用路由,通过router-link,router-view
    router-link的一些属性
    tag:tag可以指定渲染成什么组件,tag=‘li’
    replace:replace不会留下history记录,所以指定replace的情况下, 后退返回不能回到前一个页面
    active-class:当路由匹配成功时,会自动给当前元素设置一个router-link-active的class,设置active-class可以修改默认名称
    动态路由
-----------router包下index.js路由配置基础模板	
//1.导入路由对象,调用vue.use(VueRouter)
import VueRouter from 'vue-router';
import Vue from 'vue';

// 懒加载写法
const Home = () => import('../components/Home');
const HomeHeader = () => import('../components/HomeHeader');
const HomeAside = () =>import('../components/HomeAside');
const HomeMain = () => import('../components/HomeMain');

//1.通过vue.use(插件),安装插件
Vue.use(VueRouter);

//2.创建路由对象vuerouter对象
const routes = [
    {
        path:'/',
        //路由转发
        redirect:'/home'
    },
    {
        path: '/home',
        component:Home
    },
    //{
     //动态路由写法
        //path: '/home/:userId',
        //component:Home,
    //},
        // {
    //     //路由的嵌套
    //     path: '/home',
    //     component:Home,
    //     children:[
    //         {
    //             path:'aside',
    //             component:HomeAside
    //         },
    //         {
    //             path: 'header',
    //             component:HomeHeader
    //         },
    //         {
    //             path:'main',
    //             component:HomeMain
    //         }
    //     ]
    // },
    {
        path: '/aside',
        component:HomeAside
    },
    {
        path:'/header',
        component:HomeHeader
    },
    {
        path:'/main',
        component:HomeMain
    }

];

const router = new VueRouter({
    //配置路由与组件之间的映射关系
    routes,
    // 浏览模式
    mode:'history'
});

//3.将router对象传入到vue实例中
export default router

-----------App.vue模板基础	
<template>
    <div id="app">
        <!--        to的方式跳转-->
<!--        <router-link to="/header" tag="li" replace active-class="active">首页</router-link>-->
<!--        <router-link to="/aside">目录</router-link>-->
<!--        <router-link to="/main">内容</router-link>-->

<!--        <button @click="headerClick">首页</button>-->
<!--        <button @click="asideClick">目录</button>-->
<!--        <button @click="mainClick">内容</button>-->
<!--        <router-link to="/aside">头部</router-link>-->
<!--        动态路由写法-->
<!--        <router-link :to="'/home/'+userId">首页</router-link>-->
<!--        <router-view></router-view>-->

    </div>
</template>

<script>

export default {
    name: 'App',
    // data(){
    //     return{
    //         userId:'abc'
    //     }
    // }
    // methods:{
    //     headerClick(){
    //         //通过代码方式修改路径
    //         this.$router.push('/header');
    //         // this.$router.replace('/header');
    //         console.log('headerClick')
    //     },
    //     asideClick(){
    //         this.$router.push('/aside');
    //         console.log('asideClick')
    //     },
    //     mainClick(){
    //         this.$router.push('/main');
    //         console.log('mainClick');
    //     }
    // }
}
</script>
<style>
</style>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值