Vue框架的一点使用总结

Vue安装

https://cn.vuejs.org/v2/guide/

1.页面直接引入
2.npm方式,与webpack结合
3.vue-cli 搭建单页面应用(SPA)的脚手架

( 项目所使用的方式是npm方式,与webpack结合。)

webpack

https://www.jianshu.com/p/8906b197a271
webpack配置文件 webpack.config.js

MVVM

1.Model : 数据 业务逻辑
2.View : 页面 DOM
3.ViewModel : Vue主要工作,将数据与DOM关联,具有响应式效果(修改Model,DOM跟着改变,所以只需关注Model方面的操作)

Vue 常用指令

1.v-text : 与{{ }}功能类似
2.v-if
3.v-else
4.v-for
5.v-on : 缩写 @
6.v-bind : 缩写 :
7.v-model : 只用于表单元素,有双向绑定功能

Vue实例

每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的:

var vm = new Vue({
    //选项
    el: '#app',
    render: h => h(App),
    //template: "<div><router-view></router-view></div>",
    router,
    store,
    data:" ", //数据
    computed:" ", //计算属性
    ...
})

选项

1.data : 数据
2.computed : 计算属性 , 基于依赖进行缓存
3.components : 组件
3.methods : 方法
4.watch : 监听 , 可以监听数据变化 , 调用方法等 ,( 这个项目中 更多用于 监听 vuex状态值的改变 ,进行一些响应 或 调用方法 处理数据。)
5.props : 一般用于父子组件数据传递
6.filters : 过滤器 , ( 在项目中更多用于对 插值表达式 进行一些处理,比如 加单位 , 字符串处理 等。)

生命周期钩子

1.beforeCreate : vue实例创建前
2.created : vue实例创建完成,但是data和methods等还未初始化
3.beforeMount : 数据等初始化好了,还未挂载到DOM元素上
4.mounted : 已挂载到页面DOM上,页面上可以看见数据了
5.beforeUpdate :data等发生改变,但还未渲染到页面
6.updated : 已渲染到页面
7.beforeDestroy : 实例销毁之前
8.destroyed : 实例销毁完成

( 一般在项目中使用较多的是 mounted 钩子,在页面加载出来的时候执行一些操作,准备好页面的初始数据。)
( updated可以用在数据改变之后 需要执行一些操作等 , 简单的数据有时可以用过滤器代替)

生命周期 vue官方图片

Vue组件

通常一个应用会以一棵嵌套的组件树的形式来组织


组件 vue官方图片

1.全局注册 : vue.component()
2.局部注册 : 在选项中使用comnents选项定义组件
3.在模块系统中局部注册 :

import ComponentA from './ComponentA'
import ComponentC from './ComponentC'

export default {
  components: {
    ComponentA,
    ComponentC
  },
  // ...
}

vue组件的定义与vue实例基本相同。

Vue Router

https://router.vuejs.org/zh/

Vue Router 是 Vue.js 官方的路由管理器。

先 npm install 安装

import VueRouter from 'vue-router' //路由

//全局注册
Vue.use(VueRouter)

// 定义路由
// 每个路由应该映射一个组件。
const routes = [
  { path: '/home', component: Home },
  { path: '/main', component: Main }
]

const router = new VueRouter({
    routes,  //在routes中编写具体的路由
    mode: 'history'
})

new Vue({
    el: '#app',
    render: h => h(App),
    routes // (缩写) 相当于 routes: routes  , 在vue实例中添加
    store
})

== 路由配置:==
1.path : 路径
2.component : 组件
3.children : 嵌套子路由

    <!-- 路由出口 -->
    <!-- 路由匹配到的组件将渲染在这里 -->
    <router-view></router-view>

路由导航:

<router-link :to="...">  //标签方式

//编程式
this.$router.push({
    path: '/index/energymanagement' ///////路由跳转
});

Vuex

https://vuex.vuejs.org/zh/

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

(有点类似全局变量的概念 ,Vuex是一个全局单例模式)

Vuex 和单纯的全局对象有以下两点不同:

Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。

( 你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。)

Vuex的引入与路由类似:
先 npm install

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex);

/*访问状态对象--存放变量*/
const state = {
    image_path: "",
    activePid: 0,
    activeId:0

}
/*访问触发对象--存放事件*/
const mutations = {
  
}
export default new Vuex.Store({
    state,
    mutations
})

然后再Vue实例中引入:

import store from "./Home/store/store.js"

new Vue({
    el: '#app',
    render: h => h(App),
    routes
    store  //在vue实例中添加
})

在程序中获取状态 : this.$store.state
提交mutations : this.$store.commit

( 在项目中状态管理可以用于 多个 组件 之间 共享数据, 普通的 组件传递数据 很繁杂 ,项目变大 ,模块变多 , 代码变多 以后,普通的组件传递数据 代码 非常乱,很难维护。而用Vuex后,组件 之间 共享数据 非常简单方便)

( 比如 : 一个组件发生事件,另一个组件 要响应 , 如果是父子组件 还好一点,可以通过props 单向传递( proops 是单项数据流),如果是 兄弟组件 这种,可以通过事件传递数据。这些 方法 在模块数量 少 的时候 还不会觉得 太麻烦,一旦多了,很难维护)

( 在项目中,可以用 computed 计算属性 获取 状态数据 , 可以用 watch 监听,如果数据发生改变,执行一些方法,或者请求数据 等 操作)

Axios

https://www.kancloud.cn/yunye/axios/234845

Axios是访问后端服务使用的库。

npm install axios

安装其他插件的时候,可以直接在 main.js 中引入并 Vue.use(),但是 axios 并不能 use,只能在每个需要发送请求的组件中即时引入。

引入方式一般有两种:
1.Vue.prototype 原型属性中引入, 如:Vue.prototype.$http = axios;然后就可以在组件中直接用了

    var _this = this;
    _this.$http.get("/energy/treeNode").then(function (res) {
        _this.data = res.data;
    });

2.在Vuex的action方法中封装。

axios已经把请求封装好了,有 get 、post 等, 当请求成功时,会执行 .then,失败就执行 .catch 。

( 这两个回调函数都有各自独立的作用域,如果在里面直接用this访问,是无法访问到 Vue 实例的, 可以 用 var _this = this; 的方法 , 回调函数就可以访问到Vue实例了。 )

element-ui

http://element-cn.eleme.io/#/zh-CN/component/installation

element-ui与其他组件库一样,安装方式可以直接在页面通过标签引入 , 也可以npm install方式引入,与webpack打包工具配合使用。

import ElementUI from 'element-ui' //element组件
import 'element-ui/lib/theme-chalk/index.css'//element ui样式

Vue.use(ElementUI)

自定义样式:
element-ui的样式使用的是scss,可以直接改变element-ui的样式变量。
( 也可以直接找到元素的类名,直接修改样式,但是这样改要注意样式优先级。)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容