Vue是一套构建用户界面的框架,只关注视图层,它不仅易于上手,还便于与第三方库或既有项目整合。(Vue有配套的第三方类库,可以整合起来做大型项目的开发)
const vm = new Vue({
el:'#app',//所有的挂载元素会被 Vue 生成的 DOM 替换
data:{ // this->window },
methods:{ // this->vm},
//注意,不应该使用箭头函数来定义 method 函数 ,this将不再指向vm实例
props:{} ,// 可以是数组或对象类型,用于接收来自父组件的数据
//对象允许配置高级选项,如类型检测、自定义验证和设置默认值
watch:{ // this->vm},
computed:{},
render(){},
// 声明周期钩子函数
...
})
当一个 Vue 实例被创建时,它将 data 对象中的所有的 property 加入到 Vue 的响应式系统中。当这些 property 的值发生改变时,视图将会产生“响应”,即匹配更新为新的值。
例外:Vue实例外部新增的属性改变时不会更新视图。
Object.freeze(),会阻止修改现有的 property,响应系统无法追踪其变化。
vm.$data._property
的方式访问这些 property。不要在选项 property 或回调上使用箭头函数,this将不会指向Vue实例
比如created: () => console.log(this.a) 或 vm.$watch('a', newValue => this.myMethod())。
因为箭头函数并没有 this,this 会作为变量一直向上级词法作用域查找,直至找到为止,经常导致 Uncaught TypeError: Cannot read property of undefined 或 Uncaught TypeError: this.myMethod is not a function
之类的错误。
过渡类名:
v-enter(刚开始进入的点) v-enter-active v-enter-to (结束点)
v-leave v-leave-active v-leave-to
实现多种类型的动画: 在transition比标签中设置name属性,使用 name值 替换v 来实现
使用 my-enter my-enter-active my-enter-to
my-leave my-leave-active my-leave-to
作为类名来设置样式。
<transition enter-active-class='bounceIn animated'
leave-active-class = 'bounceOut animated'
>
<h3 v-show='flag' class='animated'>这是一个h3标签</h3>
</transition>
:duration="500"
分别设置 :duration="{enter:400,leave:1000}"
var com = Vue.extend({
//通过template属性 指定组件要展示的html结构
template:'这是使用Vue.extend搭建的全局组件
'
})
{
template:'这是使用Vue.extend搭建的全局组件-com3
'
}
<template id="tmpl"> 写在受控区域外面
......
</template>
{ template:'#tmpl' }
编译的作用域:自身的数据在自身模板template标签中生效
var routerObj = new VueRouter({
routes:[ 3. 路由匹配规则
//path-监听的路由地址; component 中存放的login不是组件名称,而是组件的模板对象
{ path:'/login',component:login },
// component不加s,路由的命名视图+s
]
})
<router-link to='/login'>登录</router-link>
<router-link to='/register'>注册</router-link>
<!-- 展示哪个组件 -->
<router-view></router-view>
router-link默认会被渲染成a标签,tag属性会把router-link渲染成其他标签
redirect重定向:{ path:’/’,redirect:’/login’}, 重定向到login页面
this.$router
-> VueRouter ; 新建的路由实例对象 this.$route
-> Object
方法中使用 this.$route
data中直接使用$route
组件中的this指向VueComponent对象; vm实例中this指向Vue对象
node_modules文件件 — 项目依赖文件
public文件夹 — index.html ,logo
src文件夹 — 静态资源 项目源码
assets — 静态资源文件,需要打包
components — 组件,一般是公共组件
router — 路由配置
store — vuex
views — 展示的页面
app.vue — 项目中最大的组件
mian.js — 项目入口文件
static文件夹 — 允许外界访问的资源文件 不会被打包
.gitignore — git 项目管理时忽略的文件
babel.config.js — js语法转换的配置文件
package.json — 项目记录文件,依赖文件
package-lock.json — package.json文件中 版本相关的记录
build文件夹 — 与webpack打包相关的配置
config文件夹 — 项目全局配置
node_modules文件件 — 项目依赖文件
public文件夹 — index.html ,logo
src文件夹 — 项目源码
assets — 静态资源文件(css,js…),需要打包
components — 组件,一般是公共组件
router — 路由
views — 展示的页面和私有组件
app.vue — 项目中最大的组件
mian.js — 项目入口文件
static文件夹 — 允许外界访问的资源文件 不需要打包
babelrc — js语法转换的配置文件
.editorconfig — 编辑相关配置
.gitignore — git 项目管理,打包时忽略的文件
.postcssrc.js — css
index.html — 项目中唯一的html文件
package.json — 项目记录文件,依赖文件
package-lock.json — package.json文件中 版本相关的记录
render属性与methods属性同级
render:function(createElement){ // 处理方法的参数 createElement 是一个方法
return createElement(login);//调用createElement(login)将 指定组件模板渲染为html结构
// login-组件的模板对象 ,不是组件名称
//return 返回的结果,会替换el指定的容器
// component 是插入到 id='app'的标签内
}
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式
安装:npm i vuex -S
引入:import Vuex from ‘vuex’
手动安装:Vue.use(Vuex)
在 src下新建 store文件夹,在index.js中 创建store对象
基本代码结构:
const store = new Vuex.Store({
state:{ 共享的数据 }
mutations:{ //只接收同步方法}
actions:{ //存放异步方法}
getters:{ // 相当于state的计算属性 }
module:{
//模块:每个模块拥有自己的state、mutations、actions、getters等
}
})
export default store // 导出store对象
main.js中引入store,在vm实例中注册store
获取state中的数据,在页面中应用 : {{$store.state.city}} // $store获取 store对象
更改 Vuex 的 store 中的(数据)状态的唯一方法是提交 mutation.
直接修改state中 的数据,页面不会重新渲染
this.$store.commit('addstu',stu); 提交给mutation
mutations:{ //修改state中的数据
事件类型:回调函数
addstu(state,stu){ // state 默认参数
state.students.push(stu);
}
this.$store.commit( 'incrementCount',{count:0 });
this.$store.commit({
type:'incrementCount',
count
});
异步方法处理:
this.$store.dispatch('changeInfo'[,实参]);
//提交到actions 中(调用actions方法)
actions:{
changeInfo(context,形参){
context.commit('aChangeInfo');//提交到mutations 中
}
}
context是和store对象具有相同方法和属性的对象,可以通过context去进行commit相关的操作, 也可以获取context.state等
在Action中, 我们可以将异步操作放在一个Promise中, 并且在成功或者失败后, 调用对应的resolve或reject.
{{ $store.getters.方法名}}
Vue.js基础篇到此结束,若发现有误之处请及时联系并指出,谢谢!