目录解析
src
这里是我们要开发的目录,基本上要做的事情都在这个目录里。里面包含了几个目录及文件:
- assets: 放置一些图片,如logo等。
- components: 目录里面放了一个组件文件,可以不用。
- App.vue: 项目入口文件,我们也可以直接将组件写这里,而不使用 components 目录。
- main.js: 项目的核心文件。
生命周期
vue每个组件都是独立的,每个组件都有一个属于它的生命周期,从一个组件创建、数据初始化、挂载、更新、销毁,这就是一个组件所谓的生命周期。在组件中具体的方法有:
- beforeCreate
- created
- beforeMount
- mounted
- beforeUpdate
- updated
- beforeDestroy
- destroyed
内置的方法、属性运行顺序:props => methods =>data => computed => watch
Vue构造器
每个 Vue 应用都需要通过实例化 Vue 来实现。
语法格式如下:
var vm = new Vue({
// 选项
})
- 在 Vue 构造器中有一个
el
参数,它是 DOM 元素中的 id。 data
用于定义属性。methods
用于定义的函数,可以通过 return 来返回函数值。- `` 用于输出对象属性和函数返回值。
- 使用
v-html
指令用于输出 html 代码。 - HTML 属性中的值应使用
v-bind
指令,用来响应地更新 HTML 属性。v-bind:href
缩写:href
v-bind:class
设置样式属性
v-on
指令,它用于监听 DOM 事件v-on:click
缩写@click
v-model
指令来实现双向数据绑定。.lazy
在 “change” 而不是 “input” 事件中更新.number
自动将用户的输入值转为 Number 类型.trim
自动过滤用户输入的首尾空格
- 条件判断使用
v-if
指令。 v-show
指令来根据条件展示元素。v-for
可以绑定数据到数组来渲染一个列表,可以通过一个对象的属性来迭代数据。- 计算属性:
computed
,基于它的依赖缓存,只有相关依赖发生改变时才会重新取值。computed 属性默认只有 getter。 - 计算属性:
methods
,在重新渲染的时候,函数总会重新调用执行。 - 监听属性
watch
,响应数据的变化。vm.$watch('counter', function(nval, oval) { alert('计数器值的变化 :' + oval + ' 变为 ' + nval + '!'); });
组件
- Component
组件可以扩展 HTML 元素,封装可重用的代码。
注册一个全局组件语法格式如下:
Vue.component(tagName, options)
tagName 为组件名,options 为配置选项。注册后,我们可以使用以下方式来调用组件:
<tagName></tagName>
- Prop
prop 是子组件用来接受父组件传递过来的数据的一个自定义属性。
父组件是使用 props 传递数据给子组件,但如果子组件要把数据传递回去,就需要使用自定义事件! 我们可以使用 v-on 绑定自定义事件, 每个 Vue 实例都实现了事件接口(Events interface),即:
- 使用 $on(eventName) 监听事件
- 使用 $emit(eventName) 触发事件
注意:data 选项是一个函数,组件不相互影响
路由
<router-link>
是一个组件,该组件用于设置一个导航链接,切换不同 HTML 内容。 to 属性为目标地址, 即要显示的内容。默认会被渲染成一个<a>
标签to
的值传到 router.push()- 设置
replace
属性的话,当点击时,会调用 router.replace() 而不是 router.push(),导航后不会留下 history 记录。
必备知识
调用关系:App.vue -> router/index.js -> components/xxx.vue
页面跳转
1、在router添加路由
{
path: '/bookshelf',
name: 'bookshelf',
component: Bookshelf
}
2、添加跳转链接
<router-link :to="{name: 'bookshelf', params: { entityId: this.entityId } }"
:class="{'flex-item-1':'flex-item-1',cur:tabs[0].isShow}" href="javascript:">
<span class="tabNav-ico tabNav-book"></span>
<span class="tabNav-txt">书 架</span>
</router-link>
二级路由
1、添加路由
{
path: '/gouwuche',
name: 'gouwuche',
component: gouwuche,
children:[
{
path: '/gouwuche/shoucang',
component: shoucang,
},
{
path: '/gouwuche/xihuan',
component: xihuan,
},
{
path: '/gouwuche/',
component: shoucang,
}
]
}
2、在父组件使用router-view标签给vue组件的跳转提供一个容器。
去掉#号
默认是hash模式,设置history模式即可去掉#号,在router路由文件进行设置。
new Router({
mode: 'history',
routes: []
})
页面使用组件
<template>
<div>
<Xxx></Xxx>
</div>
</template>
<script>
import xxx from '../components/xxx.vue'
// 注册
export default{
components: {
Xxx
}
}
</script>
定义事件
1、定义事件总线 Msg.vue
import Vue from 'vue'
export default new Vue
2、定义事件,传值
<script>
import Msg from './Msg.vue'
export default{
// 定义事件
methods: {
menu1: function() {
// 传值,会触发on事件
Msg.$emit("val", "1");
}
}
}
</script>
3、接收传值
<script>
import Msg from './Msg.vue'
export default {
data() {
return {
// 赋值
kk: 0
}
},
// 获取值
mounted: function() {
// 下划线表示副本
var _this = this;
// 接收
Msg.$on('val', function(m) {
// 这里不能用this,因为这里的this指的是on,不再是当前的vue
_this.kk = m;
})
}
}
</script>
注意:事件总线的扩展名需要是js,所以Msg.vue需要改成Msg.js
axios获取数据
1、安装axios
npm instal axios --S
2、在main.js引用注册axios
import axios from 'axios'
// 全局注册
Vue.prototype.$http = axios
3、页面使用
<script>
export default {
name: "show",// div定义的name
data() {
var _this = this;
this.$http.get(url).then(function(res){
_this.list = res.data;
})
return {
list: []
}
}
}
</script>
父子组件传值
父组件:
<GoodList :goodId="1" />
子组件:
props: {
goodId: Number
},
// 监听值的变化
watch: {
goodId() {
}
}
Vuex
专门为Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
组成介绍:
- state:数据仓库
- getter:用来获取数据
- mutation:用来修改数据,同步,commit方法提交
- action:用来提交mutation,异步,dispatch方法提交
安装
1、安装vuex
npm install vuex
2、创建vuex实例:new Vuex.store()
import Vuex from "vuex"
Vue.use(Vuex)
const store = new Vuex.Store({
state: {
count: 0
}
})
3、main.js中将vuex实例挂载到vue对象上
new Vue({ store, render: h => h(App) }).$mount(“#app”)
使用Vuex
1、定义state属性
2、在main.js定义mutation方法
const store = new Vuex.Store({
state: {
count: 0
},
mutations: {
countIncrease(state) {
state.count++
},
countIncrease(state, v) {
state.count = v
}
}
})
3、在组件修改state
export default {
methods: {
countIncrease() {
this.$store.commit("countIncrease");
// 带参数
this.$store.commit("countIncrease", 100);
}
}
}