一:vue的使用
创建一个vue对象,
var vm = new Vue({
el:'#id',
data:{
a:10
}
});
场景:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.输出到html中:<div>{{a}}</div>
2.现在我不想输出到html内容中,我想输出到标签的属性中去,比如div的title中:<div v-bind:title="a">你好</div> 或者 <div :title="a">你好</div>
3.在vue中如何使用事件:<div v-on:click="事件函数名">{{a}}</div> 或者 <div @click="事件函数名">{{a}}</div>
4.我想让用户输入一些数据:
<div id="app" >
<input type="text" v-model:value="a">{{a}}
</div>
5.循环data里的数组到元素中:
data:{
studentInfo:[
{'name':'hubo','age':12},
{'name':'xiaohong','age':22},
{'name':'bangzi','age':44}
]
}
<ul>
<li v-for="x in studentInfo">{{x.name}}+' '+{{x.age}}</li>
</ul>
6.{{a}} vue的表达式有点局限,因为我输出的话有可能是html文本,有可能是a标签等等,但是{{}}花括号都给我转义了,直接输出了,可是我想生成一个a标签等等。这里就使用了v-html
data:{
a:'<a href="http://www.baidu.com">baidu</a>'
}
<div v-html="a"></div>
7.实现两个输入框,用户输入两个数字,立马求得和。
<input type="text" v-model:value="setA">
<input type="text" v-model:value="setB">
{{a+b}}
data:{
a:0,b:0
},
computed:{
setA:{
get:function(){
return this.a;
},
set:function(newValue){
this.a = parseInt(newValue);
}
},
setB:{
get:function(){
return this.b;
},
set:function(newValue){
this.b = parseInt(newValue);
}
}
}
8.监听:
<input type="text" v-model="a">{{a}}
watch:{
a:function(newval,oldval){
alert('cong' + oldval + '->' +newval);
}
}
9.事件之修饰符
10:v-if使用
指令:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
{{}} -----称为vue表达式
v-bind:绑定属性 简写 ‘冒号:’
v-on:绑定事件,配合methods 简写 ‘@’ ----------------------事件里边还有关键词是修饰符:
v-model:双向绑定,就是数据层变,那么我视图层也会变。视图层变,我的数据层也会变。
v-for:循环数据
v-html:原样输出html
v-if:表示判断。如果是true就显示,如果是false就是不显示。 不显示的话,就是让元素消失,删除,而不是隐藏。
v-show:和上边的v-if相似,但是v-show是把元素隐藏。
v-cloak:可以这遮盖、隐藏 因为网速慢的原因导致的元素数据没出来的情况。
v-once:提高性能
v-pre:提高性能
花括号里面是操作:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
el:是指定vue的作用范围
data:是数据
methods:是函数,绑定事件的函数在这里命名
computed:计算数据:受控制的访问--get set ---适合同步操作
watch:监听,当数据变化的时候,我们能知道,有通知 ----适合异步操作
vue-router:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
路由就是一个锚点,根据锚点来显示不同的组件。
路由对象:
1.path 匹配的路由路径
2.component 路由主体:包括template、
3.children 子路由
1.先声明一个路由:
var r1 = new VueRouter({
routes:[
{path:'/user',component:{
template:'<div>用户列表<.div>'
}},
{path:'/article',component:{
template:'<div>文章列表</div>'
}}
]
});
2.调用这个路由,把r1放入我们的对象里边。
var vm = new Vue({
el:'#app',
router:r1
});
3.路由放入了vue对象中还不够,你必须告诉vue,我这个组件要在哪里渲染,使用router-view标签这个渲染容器来告诉vue在哪里渲染、
<router-view></router-view>
使用<router-link></router-link>标签来实现用户点击,其实也就是一个a标签。
<a href="#/user">用户</a>
<router-link to="/user">用户</router-link> 作用其实都是一样的, 但是就是#不用写。还有一个好处:编译完之后多了一个class,就是默认点击的class---active
4.路由都有参数。
window.onload = function(){
var r1 = new VueRouter({
routes:[
{path:'/user/:id/',component:{
template:'<div>{{$route.params.id}}</div>'
}}
]
});
var vm = new Vue({
el:'#app',
router:r1
});
};
<div id="app" >
<router-link to="/user/123">用户1</router-link>
<router-link to="/user/456">用户2</router-link>
<router-link to="/user/789">用户3</router-link>
<router-link to="/user/12334">用户4</router-link>
<router-view></router-view>
</div>
5.js操作路由:
在vm对象中:this.$router.go(-1);
this.$router.push()
6.路由的监听:
方法1是使用vm对象的watch,不推荐,因为路由对象已经有方法可以使用。
<div id="app" >
<router-link to="/user/123">用户1</router-link>
<router-link to="/user/456">用户2</router-link>
<router-link to="/user/789">用户3</router-link>
<router-link to="/user/12334">用户4</router-link>
<router-view></router-view>
</div>
window.onload = function(){
var r1 = new VueRouter({
routes:[
{path:'/user/:id/',component:{
template:'<div>{{$route.params.id}}</div>'
}}
]
});
var vm = new Vue({
el:'#app',
router:r1,
watch:{
'$route':function(newValue,oldValue){
alert(`id从${oldValue.params.id}变成了${newValue.params.id}`);
}
}
});
};
方法2:使用路由对象的beforeRouteUpdate:在路由对象中的component,可以有多个内容。不仅仅局限于templa
window.onload = function(){
var v1 = new VueRouter({
route:[
{path:'/user',component:{
template:'<div>{$route.params.id}</div>',
beforeRouteUpdate(to,from,next){
console.log(to);
console.log(from);
next();------------------------------------------------------------------是用来路由切换的。
}
}}
]
});
};
7.子路由,嵌套路由。
<div id="app" >
<router-link to="/user/123/info">用户1用户信息</router-link>
<router-link to="/user/123/pass">用户1修改密码</router-link><br>
<router-link to="/user/789/info">用户2用户信息</router-link>
<router-link to="/user/789/pass">用户2修改密码</router-link>
<router-view></router-view>
</div>
window.onload = function(){
var r1 = new VueRouter({
routes:[
{path:'/user/:id/',
component:{
template:'<div>用户:{{$route.params.id}}<router-view></router-view></div>',
},
children:[
{
path:'info',
component:{
template:'<div>个人信息</div>'
}
},
{
path:'pass',
component:{
template:'<div>修改密码</div>'
}
}
]
}
]
});
var vm = new Vue({
el:'#app',
router:r1
});
};
8.命名路由:
router-link:
1.基本:to="/路径"
2.扩展: :to="{name,path,params,query}"
9.命名视图:多视图:
<div id="app" >
<router-view></router-view>
<router-view name="a"></router-view>
<router-view name="b"></router-view>
</div>
window.onload = function(){
var r1 = new VueRouter({
routes:[
{
path:'/user',
components:{
default:{
template:'<div>欢迎你</div>'
},
a:{
template:'<div>国家</div>'
},
b:{
template:'<div>城市</div>'
}
}
}
]
});
var vm = new Vue({
el:'#app',
router:r1
});
};
组件:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
注册一个全局组件:
Vue.component('cmp-hubo',{template:'<div>aaa</div>'
})
使用方法:
<cmp-hubo></cmp-hubo>
注册一个局部组件:
window.onload() = function(){
var vm = new Vue({
el:'#app',
components:{
'hubo':{
template:'<div>asd123</div>'
}
}
});
}
vue-cli:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
vue-cli怎么安装:
命令行下:cnpm i -g vue-cli
列出vue的模板: vue list 常用的webpack版本
创建一个工程:vue init <template> <path>
关键词:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
虚拟dom
vue-router路由
component组件:强调重用,涉及了两个组件之间的通信、状态管理(vuex)
vue-cli:项目的管理、打包、测试等
template:模型
vuex