Vue.js(二)

  

1、vue脚手架

用来创建vue项目的工具包
创建项目:

npm install -g vue-cli(第一次安装vue-cli)
*vue init webpack 项目名

开发环境运行

cd 项目名
npm install->npm run dev

生产环境打包发布

npm run build(即生成打包好的文件dist)

安装测试服务器测试

npm install -g serve
serve dist
访问所给的链接即可

使用tomcat服务器
  将打包好的dist文件夹放入到webapps下,tomcat默认端口为8080,访问http://localhost:8080/dist即可

2、eslint

用于做项目编码规范检查的工具
基本原理:定义了很多规则, 检查项目的代码一旦发现违背了某个规则就输出相应的提示信息
有相应的配置, 可定制检查。
关闭编码时候的检查:webstorm:setting->搜索ESLint-<关闭Enable

3、组件化编程

vue文件包含3个部分:

<template>
<div></div>
<template/>

<script></script>

<style></style>

配置Vue对象

exprot default{
    //指定属性名和属性值的类型
    props:[]/{},
    //这里只能用函数的方式
    data(){
        return{
            arr:[1,2,3],
            obj:{name:value}
        }
    },
    computed: {},
    methods: {}, 
    watch: {},
    filters: {},
    directives: {},
    components: {}
}
</script>

<style>
<style/>               

 

组件化编码的基本流程
  1)拆分界面,抽取组件
  2)编写静态组件
  3)编写动态组件
  初始化数据,动态显示初始化界面 ,实现与用户交互功能

组件通信的5种方式

①props
  父子组件间通信的基本方式
  属性值的2大类型:
    一般:父组件->子组件
    函数:子组件->父组件
  隔层组件间传递:必须逐层传递
  兄弟组件间:必须借助父组件
②vue的自定义事件
  子组件与父组件的通信方式
  用来取代function props
  不适合隔层组件和兄弟组件间的通信
③pubsub第三方库
  适合于任何关系的组件间通信
  安装:npm install --save pubsub-js

④slot
  通信是带数据的标签
  注意:标签是在父组件中解析
⑤vuex
  多组件共享状态(数据的管理)
  组件间的关系也没有限制,功能比pubsub强大,更适用于vue项目

4、Ajax

相关库:
  vue-resource:vue插件,多用于vue1.x
  axios:第三方库,多用于vue2.x
①vue-resource的使用:

/引入模块
import VueResource from 'vue-resource'
//使用插件
Vue.use(VueResource)

//通过vue/组件对象发送ajax请求
this.$http.get('/someUrl').then((response)=>{
//success callback
  console.log(response.data)
},(response)=>{
  //error callback
  console.log(response.statusText) //错误信息
}
)

②axios的使用

//引入模块
import axios from 'axios'

//发送ajax请求
axios.get(url).then(response=>{
    //得到返回结果数据
    console.log(response.data)
}).catch(error=>{
    console.log(error.message)
})

5、vue-router

vue用来实现SPA的插件
使用vue-router:
1、创建路由器:router/index.js

import Vue from 'vue'
import VueRouter from 'vue-router'
import About from '../components/About.vue'
import Detail from '../components/Detail.vue'

Vue.use(VueRouter)
exprot default new VueRouter({
    routes:[
    {
    //一般路由
    path:'/about',
    component:About,
    //嵌套路由
    children:[
        {
        path:'/about/detail',
        component:Detail
        }
    ]
    },
    {
    //自动跳转路由
    path:'/',
    redirect:'/about'
    }
    ]
})            

2、注册路由器:main.js

import router from './router'
new Vue({
    router
})

3. 使用路由组件标签:

<router-link to="/xxx">Go to XXX</router-link>
<router-view></router-view>

向路由组件传递数据

params: <router-link to="/home/news/abc/123">
props: <router-view msg='abc'>

缓存路由组件

<keep-alive>
<router-view></router-view>
</keep-alive>

路由的编程式导航

this.$router.push(path): 相当于点击路由链接(可以返回到当前路由界面)
this.$router.replace(path): 用新路由替换当前路由(不可以返回到当前路由界面)
this.$router.back(): 请求(返回)上一个记录路由

6、vuex

  对应用中组件的状态进行集中式的管理(读/写)

  1、状态自管理应用

    state:驱动应用的数据源
    view:以声明方式将state映射到视图
    actions: 响应在view上的用户输入导致的状态变化(包含n个更新状态的方法)

  2、多组件共享状态的问题

    多个视图依赖于同一状态,来自不同视图的行为需要变更同一状态
    以前的解决办法
      * 将数据以及操作数据的行为都定义在父组件
      * 将数据以及操作数据的行为传递给需要的各个子组件(有可能需要多级传递)
    vuex就是用来解决这个问题的
    vuex结构图

      

3、vuex的核心概念

  1). state
    vuex管理的状态对象,它应该是唯一的

const state = {
    xxx: initValue
}

  2). mutations
    包含多个直接更新state的方法(回调函数)的对象
    谁来触发: action中的commit('mutation名称')
    只能包含同步的代码, 不能写异步代码
    

const mutations = {
    yyy (state, data) { 
    // 更新state的某个属性
}
}

  3). actions

     包含多个事件回调函数的对象
    通过执行: commit()来触发mutation的调用, 间接更新state
    谁来触发: 组件中: $store.dispatch('action名称') // 'zzz'
    可以包含异步代码(定时器, ajax)

const actions = {
    zzz ({commit, state}, data1) {
    commit('yyy', data2)
}
}

  4). getters
    包含多个计算属性(get)的对象
    谁来读取: 组件中: $store.getters.xxx

const getters = {
  mmm (state) {
    return ...
  }
}

  5). modules

    包含多个module
    一个module是一个store的配置对象
    与一个组件(包含有共享数据)对应

  6). 向外暴露store对象

  

export default new Vuex.Store({
    state,
    mutations,
    actions,
    getters
})

  7)、组件中:

import {mapGetters, mapActions} from 'vuex'
export default {
    computed: mapGetters(['mmm'])
    methods: mapActions(['zzz'])
}

{{mmm}} @click="zzz(data)"

8). 映射store

import store from './store'
new Vue({
    store
})

9). store对象
1.所有用vuex管理的组件中都多了一个属性$store, 它就是一个store对象
2.属性:
  state: 注册的state对象
  getters: 注册的getters对象
3.方法:
  dispatch(actionName, data): 分发action

5、将vuex引到项目中

1). 下载: npm install vuex --save
2). 使用vuex
1.store.js

import Vuex from 'vuex'
export default new Vuex.Store({
    state,
    mutations,
    actions,
    getters,
    modules
})

2.main.js

import store from './store.js'
new Vue({
    store
})
posted @ 2019-07-16 22:50  loading---  阅读(194)  评论(0编辑  收藏  举报