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对比
- Vue初体验
- 插值的操作
- 动态绑定属性
- 计算属性
- 事件监听
- 条件判断
- 循环遍历
- v-model使用
- 组件化开发
-
安装vue-router
步骤一:安装vue-router
npm install vue-router --save
步骤二:在模块工程中使用
1.导入路由对象,并调用Vue.use(VueRouter)
2.创建路由实例,并且传入路由映射配置
3.在Vue实例中挂载创建的路由实例使用vue-router
1.创建路由组件
2.配置路由映射:组件和路径映射关系
3.使用路由,通过router-link,router-viewrouter-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>