new Vue({
el:'#app',//要控制的容器
template:'',//组件调用标签
components:{App}//注册的组件 名称来自import引入时的名字
})
组件嵌套方式
1,全局注册
(1).在main.js中import引入
(2).在new Vue 的上方
Vue.component("组件的name",引入时定义的名字);
(3).在需要的位置用组件中name的名字做标签使用
2,局部注册
(1).在需要的父级组件的script内export外,import引入
(2).在其export的components对象中添加注册,名字是引入时定义的名字
(3).在需要的位置用组件中name的名字做标签使用
组件的style上加scoped表示样式作用域
传值:string number boolean 传值仅仅会在单一操作的组件上发生变化
引用:array object 传引用会导致全部的数据变化
父子属性传值:
父向子传值:
1.在子组件的标签上v-bind:自定义属性名=“传值名”,
2.在子组件内sxport中props:[“自定义属性名”]
props应写成标准写法:
props:{
自定义属性名:{
type: Array,//数据类型
required:true, //
}
}
事件传值(子向父传值):
1.在子组件中定义事件,用this.$emit("自定义的事件名", "传递的内容");
2.在父级组件中的调用标签上绑定事件v-on:子组件中定义的事件名="父组件中要执行的事件($event)"进行接收;
3.在父级的methods中定义事件接收
父级事件名(形参){
this.要改变的参数名=形参;
}
生命周期
new Vue()实例化vue对象;
在完成之前会有一个beforeCreate,它仅对事件进行一个配置,这时可以进行一个加载的动画;用此钩子函数;
之后进入到created,这时候实例化完成,组件创建完成,属性成功绑定,但Dom并没有生成,页面并没有展示出来;这里可以获取对应的一些数据,结束上边钩子的例子;如停止加载动画,准备渲染DOM;
之后会查看当前有没有el(element)属性,
有,往下;
没有,查看有没有$mount(),
有,往下,
没有,生命周期结束。
之后会检查有没有template属性
有,template中执行一个具体的组件,执行render方法渲染template里对应的内容
没有,生命周期结束;
之后beforeMount,编译template方法,在虚拟DOM中执行,页面还是看不到内容
之后是mounted,beforeMount之后编译的模板放入页面,mounted时模板编译完成,开始挂载;mounted结束页面就会显示出来;如有页面显示出来之后需要做的,放在此方法里
页面显示完成了,组件也挂载了,此时对项目做一些更改(增删改查);会触发下一个钩子函数Update
beforeUpdate:当前组件在更新之前的钩子
updated:组件在更新之后的钩子;此钩子执行之后,页面就是更新之后的样子
beforeDestroy:组件实例销毁之前;
distroyed:组件实例销毁之后;
methods: {},
beforeCreate: function() {
alert("组件实例化之前执行的函数");
},
created: function() {
alert("组件实例化完毕,但页面还未显示");
},
beforeMount: function() {
alert("组件挂载前,页面仍未展示,但虚拟Dom已经配置");
},
mounted: function() {
alert("组件挂载后,此方法执行后页面显示");
},
beforeUpdate:function(){
alert("组件更新前,页面仍未更新,但虚拟Dom已经配置");
},
updated:function(){
alert("组件更新后,页面显示更新后的组件");
},
beforeDestroy:function(){
alert("组件销毁前");
},
destroyed:function(){
alert("组件销毁");
}
路由和http
共享网络接口:http://jsonplaceholder.typicode.com/
安装resource模块 指令:npm install vue-resource --save-dev
router下的index.js中配置
引入:
import Router from 'vue-router'
import VueResource from 'vue-resource'
Vue.use(Router)
Vue.use(VueResource)
mode: "history", //在router上边使用这个是去除链接上初始的#
routes: [
{
path: '/', //根路径
name: 'HelloWorld',
component: HelloWorld,//此处是引入时的起的名字
children:[
{
path: '/home', //路径 嵌套字路由
name: 'HelloWorld',
component: HelloWorld,//此处是引入时的起的名字
}
]
}
]
在组件中的钩子函数中请求
created(){
this.$http.get("http://jsonplaceholder.typicode.com/users")
.then((data)=>{
console.log(data);
this.users=data.body;
})
}