VUE系列二:vue基础
一、组件嵌套1. 新建一个组件Users.vue2. 全局注册组件2.1. 在main.js里面引入组件Users.vue
Vue from 'vue'
App from './App'
=
<span style="color: #008000">// <span style="color: #008000">全局注册组件Users.vue<span style="color: #ff0000">Vue.component("users",Users); <span style="color: #008000">/<span style="color: #008000"> eslint-disable no-new <span style="color: #008000">/ <span style="color: #0000ff">new Vue({ <span style="color: #008000">//<span style="color: #008000">实例化一个vue对象 el: '#app',<span style="color: #008000">//<span style="color: #008000">index.html的根元素app components: { App },<span style="color: #008000">//<span style="color: #008000">注册根组件App.vue才能使用 template: ''<span style="color: #008000">//<span style="color: #008000">VUE模板使用,可以是组件、html标签等 }) 2.2. 在根组件App.vue里面使用组件users <span style="color: #008000">//<span style="color: #008000">2. 行为:处理逻辑 <span style="color: #008000">//<span style="color: #008000">3. 样式:解决样式 3、局部注册组件3.1. 删除main.js里面注册的全局组件users 3.2. 在根组件app.vue里面局部注册和使用组件 <span style="color: #008000">// <span style="color: #008000">2. 行为:处理逻辑<span style="color: #008000">//<span style="color: #008000">3. 样式:解决样式 4、页面呈现效果?二、组件CSS的作用域1. 分别在在组件App.vue和Users.vue里面定义一个h1的样式 App.vue
App
//2. 行为:处理逻辑
<span style="color: #0000ff"><<span style="color: #800000">script<span style="color: #0000ff">> <span style="background-color: #f5f5f5; color: #008000">//<span style="background-color: #f5f5f5; color: #008000">局部注册组件Users.vue <span style="background-color: #f5f5f5; color: #000000">import Users from <span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">./components/Users<span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #008000">//<span style="background-color: #f5f5f5; color: #008000">导入组件Users.vue <span style="background-color: #f5f5f5; color: #000000"> export <span style="background-color: #f5f5f5; color: #0000ff">default<span style="background-color: #f5f5f5; color: #000000"> { name: <span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">App<span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">,<span style="background-color: #f5f5f5; color: #008000">//<span style="background-color: #f5f5f5; color: #008000">组件App.vue的名字 <span style="background-color: #f5f5f5; color: #000000"> components: { <span style="background-color: #f5f5f5; color: #000000">"<span style="background-color: #f5f5f5; color: #000000">users<span style="background-color: #f5f5f5; color: #000000">"<span style="background-color: #f5f5f5; color: #000000"> : Users <span style="background-color: #f5f5f5; color: #008000">//<span style="background-color: #f5f5f5; color: #008000">注册组件Users.vue才能使用 <span style="background-color: #f5f5f5; color: #000000"> } } <span style="color: #0000ff"></<span style="color: #800000">script<span style="color: #0000ff">><span style="color: #000000"> //3. 样式:解决样式 Users.vue
users
<span style="color: #0000ff"></ <span style="color: #800000">div<span style="color: #0000ff">><span style="color: #0000ff"></<span style="color: #800000">template<span style="color: #0000ff">> <span style="color: #0000ff"><<span style="color: #800000">script<span style="color: #0000ff">><span style="background-color: #f5f5f5; color: #000000"> <span style="color: #008000"> 查看页面效果可以发现App.vue里面的h1的样式被Users.vue里面的样式给覆盖了 ?那么我们要他们各自使用自己的h1的样式怎么办呢? 我分别给他们加上scoped就可以了 ?App.vue的样式: ?Users.vue的样式: ?页面效果: 三、属性传值props(父组件把数据传递给子组件)把父组件App.vue的数据传递给子组件Users.vue使用 App.vue
App
//2. 行为:处理逻辑
<span style="color: #0000ff"><<span style="color: #800000">script<span style="color: #0000ff">> <span style="background-color: #f5f5f5; color: #008000">//<span style="background-color: #f5f5f5; color: #008000">局部注册组件Users.vue <span style="background-color: #f5f5f5; color: #000000">import Users from <span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">./components/Users<span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #008000">//<span style="background-color: #f5f5f5; color: #008000">导入组件Users.vue <span style="background-color: #f5f5f5; color: #000000"> export <span style="background-color: #f5f5f5; color: #0000ff">default<span style="background-color: #f5f5f5; color: #000000"> { name: <span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">App<span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">,<span style="background-color: #f5f5f5; color: #008000">//<span style="background-color: #f5f5f5; color: #008000">组件App.vue的名字 <span style="background-color: #f5f5f5; color: #000000"> components: { <span style="background-color: #f5f5f5; color: #000000">"<span style="background-color: #f5f5f5; color: #000000">users<span style="background-color: #f5f5f5; color: #000000">"<span style="background-color: #f5f5f5; color: #000000"> : Users <span style="background-color: #f5f5f5; color: #008000">//<span style="background-color: #f5f5f5; color: #008000">注册组件Users.vue才能使用 <span style="background-color: #f5f5f5; color: #000000"> },<span style="color: #ff0000">data () { <span style="color: #ff0000"><span style="background-color: #f5f5f5">return<span style="background-color: #f5f5f5"> { people:[<span style="background-color: #f5f5f5">"<span style="background-color: #f5f5f5">henry<span style="background-color: #f5f5f5">"<span style="background-color: #f5f5f5">,<span style="background-color: #f5f5f5">"<span style="background-color: #f5f5f5">bucky<span style="background-color: #f5f5f5">"<span style="background-color: #f5f5f5">,<span style="background-color: #f5f5f5">"<span style="background-color: #f5f5f5">emily<span style="background-color: #f5f5f5">"<span style="background-color: #f5f5f5; color: #000000"><span style="color: #ff0000">] } } } <span style="color: #0000ff"></<span style="color: #800000">script<span style="color: #0000ff">><span style="color: #000000"> //3. 样式:解决样式 ?Users.vue
users
<span style="color: #0000ff"></ <span style="color: #800000">div<span style="color: #0000ff">><span style="color: #0000ff"></<span style="color: #800000">template<span style="color: #0000ff">> <span style="color: #0000ff">< <span style="color: #800000">script<span style="color: #0000ff">><span style="background-color: #f5f5f5; color: #000000">export <span style="background-color: #f5f5f5; color: #0000ff">default<span style="background-color: #f5f5f5; color: #000000"> { name: <span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">users<span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">,<span style="color: #ff0000"><span style="background-color: #f5f5f5">//<span style="background-color: #f5f5f5"> props:["users"],//获取父组件传递过来的users <span style="background-color: #f5f5f5"> props:{ users:{ type:Array,required:<span style="background-color: #f5f5f5">true<span style="background-color: #f5f5f5; color: #000000"><span style="color: #ff0000"> } }, data () { <span style="background-color: #f5f5f5; color: #0000ff">return<span style="background-color: #f5f5f5; color: #000000"> {
} <span style="color: #008000"> ?页面效果: ?四、事件传值(子组件把数据传递给父组件)?在子组件Users.vue的方法changeTitle里面注册一个事件titleChanged并传递一个参数值:"子向父传值" <span style="color: #0000ff"></ <span style="color: #800000">div<span style="color: #0000ff">><span style="color: #0000ff"></<span style="color: #800000">template<span style="color: #0000ff">> <span style="color: #008000"><!-- <span style="color: #008000">传值: string、number、boolean <span style="color: #0000ff"><<span style="color: #800000">script<span style="color: #0000ff">><span style="background-color: #f5f5f5; color: #000000"> export <span style="background-color: #f5f5f5; color: #0000ff">default<span style="background-color: #f5f5f5; color: #000000"> { name: <span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">users<span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">,<span style="background-color: #f5f5f5; color: #008000">//<span style="background-color: #f5f5f5; color: #008000"> props:["users"],//获取父组件传递过来的users <span style="background-color: #f5f5f5; color: #000000"> props:{ users:{ type:Array,required:<span style="background-color: #f5f5f5; color: #0000ff">true<span style="background-color: #f5f5f5; color: #000000"> } },data () { <span style="background-color: #f5f5f5; color: #0000ff">return<span style="background-color: #f5f5f5; color: #000000"> {
},methods : { } <span style="color: #008000"> 在父组件里面实现事件titleChanged
v-on:titleChangedApp
//2. 行为:处理逻辑
<span style="color: #0000ff"><<span style="color: #800000">script<span style="color: #0000ff">> <span style="background-color: #f5f5f5; color: #008000">//<span style="background-color: #f5f5f5; color: #008000">局部注册组件Users.vue <span style="background-color: #f5f5f5; color: #000000">import Users from <span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">./components/Users<span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #008000">//<span style="background-color: #f5f5f5; color: #008000">导入组件Users.vue <span style="background-color: #f5f5f5; color: #000000"> export <span style="background-color: #f5f5f5; color: #0000ff">default<span style="background-color: #f5f5f5; color: #000000"> { name: <span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">App<span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">,data () { <span style="background-color: #f5f5f5; color: #0000ff">return<span style="background-color: #f5f5f5; color: #000000"> { people:[<span style="background-color: #f5f5f5; color: #000000">"<span style="background-color: #f5f5f5; color: #000000">henry<span style="background-color: #f5f5f5; color: #000000">"<span style="background-color: #f5f5f5; color: #000000">,<span style="background-color: #f5f5f5; color: #000000">"<span style="background-color: #f5f5f5; color: #000000">emily<span style="background-color: #f5f5f5; color: #000000">"<span style="background-color: #f5f5f5; color: #000000">],title : <span style="background-color: #f5f5f5; color: #000000">"<span style="background-color: #f5f5f5; color: #000000">父组件的<span style="background-color: #f5f5f5; color: #000000">"<span style="background-color: #f5f5f5; color: #000000"> } },methods : { <span style="color: #ff0000">updateTitle (msg){ <span style="color: #ff0000"><span style="background-color: #f5f5f5">this<span style="background-color: #f5f5f5">.title<span style="background-color: #f5f5f5">=<span style="background-color: #f5f5f5; color: #000000"><span style="color: #ff0000">msg; } } } <span style="color: #0000ff"></<span style="color: #800000">script<span style="color: #0000ff">><span style="color: #000000"> //3. 样式:解决样式 五、传值和传引用传值: 传递的是string、number、boolean,多处地方使用,改变一处的值,其他的地方的值不会受影响
传引用:传递的是Array、Object,多处地方使用,改变一处的值,其他的地方的值会受影响
传值和传引用类似于C语言中的传值和传址
六、生命周期(钩子函数)1. 生命周期的作用
2. 生命周期的流程图:流程图里面的钩子函数说明: beforeCreate : 实例化vue对象之前做的一些动作,这里有一些事件的初始化,在这里可以做页面的loading create:在这里vue对象已经实例化完毕,事件也初始化完毕,在这里可以做网络接口数据的请求、结束beforeCreate里面的loading create之后检查有没有el元素,如果有就继续看有没有template,如果这两个都没有,生命周期就结束了;如果有template就里面是一个组件还是一个html元素 beforeMount:在这个方法之后进行虚拟dom的渲染,注意:此时只是进行虚拟dom的渲染,页面还没显示出来 mounted :执行这个方法之后页面就显示出来了 beforeUpdate:页面进行更新之前要做的事 updated:这个方法执行完成之后页面修改的数据已改变 beforeDestroy:生命周期结束之前 destroyed:生命周期结束 3. 生命周期钩子函数的示例 ?Users.vue
users
<span style="color: #0000ff"></ <span style="color: #800000">div<span style="color: #0000ff">><span style="color: #0000ff"></<span style="color: #800000">template<span style="color: #0000ff">> <span style="color: #008000"><!-- <span style="color: #008000">传值: string、number、boolean <span style="color: #0000ff"><<span style="color: #800000">script<span style="color: #0000ff">><span style="background-color: #f5f5f5; color: #000000"> export <span style="background-color: #f5f5f5; color: #0000ff">default<span style="background-color: #f5f5f5; color: #000000"> { name: <span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">users<span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">,methods : { changeTitle : <span style="background-color: #f5f5f5; color: #0000ff">function<span style="background-color: #f5f5f5; color: #000000">(){ <span style="background-color: #f5f5f5; color: #008000">//<span style="background-color: #f5f5f5; color: #008000">注册一个事件titleChanged <span style="background-color: #f5f5f5; color: #0000ff">this<span style="background-color: #f5f5f5; color: #000000">.$emit(<span style="background-color: #f5f5f5; color: #000000">"<span style="background-color: #f5f5f5; color: #000000">titleChanged<span style="background-color: #f5f5f5; color: #000000">"<span style="background-color: #f5f5f5; color: #000000">,<span style="background-color: #f5f5f5; color: #000000">"<span style="background-color: #f5f5f5; color: #000000">子向父传值<span style="background-color: #f5f5f5; color: #000000">"<span style="background-color: #f5f5f5; color: #000000">); } },<span style="color: #ff0000"> beforeCreate:<span style="color: #ff0000"><span style="background-color: #f5f5f5">function<span style="background-color: #f5f5f5">(){ <span style="color: #008000"> 七、路由和http路由路由和a标签一样实现页面的跳转,和a标签最大的不同是路由的性能更好,原因是a标签点击多次就跳转多次性能很低,而路由的话不管你点击多少次都只跳转一次 要使用路由先安装路由:安装路由之前要先停止项目:ctrl+c安装路由的命令:npm install vue-router --save-dev安装完路由之后启动项目:npm run dev ? 路由使用示例: main.js
import Vue from 'vue'
import App from './App'
=
<span style="color: #008000">/<span style="color: #008000"> eslint-disable no-new <span style="color: #008000">/
<span style="color: #0000ff">new Vue({ <span style="color: #008000">//<span style="color: #008000">实例化一个vue对象 <span style="color: #ff0000">router,//使用路由 el: '#app',<span style="color: #008000">//<span style="color: #008000">注册根组件App.vue才能使用 template: ''<span style="color: #008000">//<span style="color: #008000">VUE模板使用,可以是组件、html标签等 }) ?新建一个Home.vue
home
<span style="color: #0000ff"></ <span style="color: #800000">div<span style="color: #0000ff">><span style="color: #0000ff"></<span style="color: #800000">template<span style="color: #0000ff">> <span style="color: #008000"><!-- <span style="color: #008000">传值: string、number、boolean <span style="color: #0000ff"><<span style="color: #800000">script<span style="color: #0000ff">><span style="background-color: #f5f5f5; color: #000000"> export <span style="background-color: #f5f5f5; color: #0000ff">default<span style="background-color: #f5f5f5; color: #000000"> { name: <span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">home<span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">,<span style="background-color: #f5f5f5; color: #000000">"<span style="background-color: #f5f5f5; color: #000000">emily<span style="background-color: #f5f5f5; color: #000000">"<span style="background-color: #f5f5f5; color: #000000">] } } } <span style="color: #0000ff"></<span style="color: #800000">script<span style="color: #0000ff">> <span style="color: #008000"> ?Users.vue
users
<span style="color: #0000ff"></ <span style="color: #800000">div<span style="color: #0000ff">><span style="color: #0000ff"></<span style="color: #800000">template<span style="color: #0000ff">> <span style="color: #008000"><!-- <span style="color: #008000">传值: string、number、boolean <span style="color: #0000ff"><<span style="color: #800000">script<span style="color: #0000ff">><span style="background-color: #f5f5f5; color: #000000"> export <span style="background-color: #f5f5f5; color: #0000ff">default<span style="background-color: #f5f5f5; color: #000000"> { name: <span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">users<span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">,data () { <span style="background-color: #f5f5f5; color: #0000ff">return<span style="background-color: #f5f5f5; color: #000000"> {
} <span style="color: #008000"> ?在根组件App.vue里面使用路由 <span style="color: #0000ff"><<span style="color: #800000">script<span style="color: #0000ff">><span style="background-color: #f5f5f5; color: #000000"> export <span style="background-color: #f5f5f5; color: #0000ff">default<span style="background-color: #f5f5f5; color: #000000"> {name: <span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">App<span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">,<span style="background-color: #f5f5f5; color: #008000">//<span style="background-color: #f5f5f5; color: #008000">组件App.vue的名字 <span style="background-color: #f5f5f5; color: #000000"> data () { <span style="background-color: #f5f5f5; color: #0000ff">return<span style="background-color: #f5f5f5; color: #000000"> {
} //3. 样式:解决样式 ?页面效果: 首页 ?点击Users跳转到Users组件 点击home跳转到Home组件 ?使用http要使用http要先安装vue-resource安装路由之前要先停止项目:ctrl+c安装路由的命令:npm install vue-resource --save-dev安装完路由之后启动项目:npm run dev ? http使用示例:在main.js里面引入vue-resource就可以在任何组件中使用了http了
import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App'
import Users from './components/Users'
import Home from './components/Home'
=
const router =
{path:"/"
{path:"/Users"
mode : "history"<span style="color: #008000">/<span style="color: #008000"> eslint-disable no-new <span style="color: #008000">/
<span style="color: #0000ff">new Vue({ <span style="color: #008000">//<span style="color: #008000">实例化一个vue对象 router,<span style="color: #008000">//<span style="color: #008000">使用路由 el: '#app',<span style="color: #008000">//<span style="color: #008000">注册根组件App.vue才能使用 template: ''<span style="color: #008000">//<span style="color: #008000">VUE模板使用,可以是组件、html标签等 }) ?在Home.vue组件中发送http请求
home
<span style="color: #0000ff"></ <span style="color: #800000">div<span style="color: #0000ff">><span style="color: #0000ff"></<span style="color: #800000">template<span style="color: #0000ff">> <span style="color: #008000"><!-- <span style="color: #008000">传值: string、number、boolean <span style="color: #0000ff"><<span style="color: #800000">script<span style="color: #0000ff">><span style="background-color: #f5f5f5; color: #000000"> export <span style="background-color: #f5f5f5; color: #0000ff">default<span style="background-color: #f5f5f5; color: #000000"> { name: <span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">home<span style="background-color: #f5f5f5; color: #000000">'<span style="background-color: #f5f5f5; color: #000000">,<span style="background-color: #f5f5f5; color: #000000">"<span style="background-color: #f5f5f5; color: #000000">emily<span style="background-color: #f5f5f5; color: #000000">"<span style="background-color: #f5f5f5; color: #000000">] } },<span style="color: #ff0000"> created(){ <span style="color: #ff0000"><span style="background-color: #f5f5f5">this<span style="background-color: #f5f5f5">.$http.get(<span style="background-color: #f5f5f5">"<span style="background-color: #f5f5f5">http://jsonplaceholder.typicode.com/users<span style="background-color: #f5f5f5">"<span style="background-color: #f5f5f5">) .then((data) <span style="background-color: #f5f5f5">=><span style="background-color: #f5f5f5"> { console.log(data); <span style="background-color: #f5f5f5">//<span style="background-color: #f5f5f5"> this.users = data.body; <span style="background-color: #f5f5f5; color: #000000"><span style="color: #ff0000"> }) } } <span style="color: #0000ff"></<span style="color: #800000">script<span style="color: #0000ff">> <span style="color: #008000"> ?请求结果: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |