vue2.0开发实践总结之疑难篇


Posted in Javascript onDecember 07, 2016

续上一篇文章:vue2.0 开发实践总结之入门篇 ,如果没有看过的可以移步看一下。 

本篇文章目录如下:

1.  vue 组件的说明和使用

2.  vuex在实际开发中的使用

3.  开发实践总结 

1.  vue 组件的说明和使用
一个组件实质上是一个拥有预定义选项的一个 Vue 实例
在header组件内部允许外部使用,需要导出属性,有2种导出方法

1.  默认导出(不用命名)

export default {
 data () {
 return {
  msg: 'header'
 }
 }
}

以上代码实际上会自动生成一个 new vue

在父组件中导入

import Header from './components/header' 

2.直接在任何变量或者函数前面加上一个关键字

export const sqrt = Math.sqrt;

在父组件中导入

import sqrt from './components/header'; 

引用一个组件 

import Header from './components/header'

在该组件中定义

export default{
 data: function () {}, //data一定要是返回一个函数
  components: {
  comHeader: Header //声明组件
 }
 }

在template中使用

<template>
 <div class="com-app">

  <com-header></com-header> //注意,html不区分大小写,所以需要将 comHeader 写成 com-header 
 </div>
</template>
 

一个vue对象通常包括下面几个属性

data:  //vue对象的数据
methods: //vue对象的方法
watch: //对象监听的方法
computed: //计算逻辑放到computed中
created: //属性已绑定,dom未生成,一般在这里进行ajax处理以及页面初始化处理

2. vuex

 vue2.0开发实践总结之疑难篇

通过尤大大这张图,我们很清楚的看到,所有的数据流都是单向的,并且actions只能通过分发mutations来修改 store 实例的状态

像一些全局信息通用,比如 header内容的渲染,是否显示,loading 什么时候显示,什么时候隐藏,以及接口api的固定值,都写在store记录组件的state。

const store = new Vuex.Store({
 state: {
 comm: {
  loading: false, //是否显示loading
  apiUrl: 'http://www.sherlochao.com:9091/photosharing/', //接口base url
  imgUrl: 'http://www.sherlochao.com:9091/filebase', //图片base url
  indexConf: {
  isFooter: true, // 是否显示底部
  isSearch: true, // 是否显示搜索
  isBack: false, // 是否显示返回
  isShare: false, // 是否显示分享
  title: '' // 标题
  }
 }
 }
})

在mutations中改变state状态

const store = new Vuex.Store({
mutations: {
 //loading的显示
 isLoading: (state, status) => {
  state.comm.loading = status
 },
 //修改header的信息
 changeIndexConf: (state, data) => {
  Object.assign(state.comm.indexConf, data)
 }
})

e.g 在 header.vue 中 控制是否显示

export default {
 data: function () {
  return {}
 },
 computed: {
  isShowSearch: function () {
  return this.$store.state.comm.indexConf.isSearch //获取vuex里面 state 状态值
  },
  title: function () {
  return this.$store.state.comm.indexConf.title
  },
  isBack: function () {
  return this.$store.state.comm.indexConf.isBack
  }
 }
}

template代码

<template>
 <div class="header">
 <div v-show="isShowSearch"></div>
 <div class="title" v-show="!isShowSearch">
  <a v-show="isBack" class="back t-icon" @click="goBack"><span
  class="iconfont icon icon-xiangzuojiantou"></span></a>
  <p>{{title}}</p>
 </div>
 </div>
</template>

在其他地方控制 header 是否显示, e.g: 详情页面

export default { 
 created: function () {
  vm.$store.commit('changeIndexConf', {
  isFooter: false,
  isSearch: false,
  isBack: true,
  isShare: true,
  title: '详情页'
  }) 
 }
 }

3.开发实践总结

1. vue-router

由于整个项目list组件很多地方公用,并且‘我的收藏',‘搜索结果页面',‘我的圈子',仅仅只是从  /search/own 到 /search/star
此时,原来的组件实例会被复用,意味着组件的生命周期钩子不会再被调用
解决方法:  复用组件时,想对路由参数的变化作出响应的话,可以简单地 watch(监测变化)  对象

export default {
 watch: {
 '$route' (to, from) {
  // 对路由变化作出响应...
 }
 }
}

2.判断是否登陆

进入个人信息页面,由于需要判断是否已登陆,此时由 router 进行一个拦截,具体代码如下

router.beforeEach(function (to,from,next) {
 var userMsg = localStorage.getItem('userMsg')
 if(to.path === '/home'){
 if(!userMsg){
  next({ path: '/login' })
 }
 }
 next()
})

3.常用api

1). 点击事件获取当前对象

event.target ,this为vue 对象 

2). 和jquery类似获取当前dom对象
 

<input type="submit" disabled="canSubmit" ref="isSubmit" @click="register" value="立即注册" class="button"/>

 this.$refs.isSubmit.removeAttribute('disabled')   //使用this.$refs 获取当前dom
 

其他常见的api  可移步   vue2.0官方文档

如果在阅读中有发现任何错误或者有更好的建议,请联系我,谢谢!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 特殊字符
Apr 05 Javascript
JS自动缩小超出大小的图片
Oct 12 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
May 29 Javascript
node学习记录之搭建web服务器教程
Feb 16 Javascript
关于Node.js的events.EventEmitter用法介绍
Apr 01 Javascript
Cookies 和 Session的详解及区别
Apr 21 Javascript
JavaScript中join()、splice()、slice()和split()函数用法示例
Aug 24 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
Feb 04 jQuery
原生js拖拽实现图形伸缩效果
Feb 10 Javascript
vue用elementui写form表单时,在label里添加空格操作
Aug 13 Javascript
使用react+redux实现计数器功能及遇到问题
Jun 02 Javascript
React更新渲染原理深入分析
Dec 24 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
Dec 06 #Javascript
JavaScript仿微博输入框效果(案例分析)
Dec 06 #Javascript
js 文字超出长度用省略号代替,鼠标悬停并以悬浮框显示实例
Dec 06 #Javascript
关于 jQuery Easyui异步加载tree的问题解析
Dec 06 #Javascript
JavaScript之Vue.js【入门基础】
Dec 06 #Javascript
浅析JavaScript中作用域和作用域链
Dec 06 #Javascript
利用JS轻松实现获取表单数据
Dec 06 #Javascript
You might like
融入意大利的咖啡文化
2021/03/03 咖啡文化
PHP中路径问题的解决方案
2006/10/09 PHP
PHP 设置MySQL连接字符集的方法
2011/01/02 PHP
PHP+Javascript实现在线拍照功能实例
2015/07/18 PHP
利用PHP如何统计Nginx日志的User Agent数据
2019/03/06 PHP
javascript 写的一个简单的timer
2009/07/30 Javascript
JavaScript中链式调用之研习
2011/04/07 Javascript
js中根据字数截取字符串,不能截断url
2012/01/12 Javascript
解析js原生方法创建表格效率测试
2013/07/08 Javascript
不用一句js代码初始化组件
2016/01/27 Javascript
jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
2016/07/09 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
微信公众号 摇一摇周边功能开发
2016/12/08 Javascript
angularjs点击图片放大实现上传图片预览
2017/02/24 Javascript
原生JS京东轮播图代码
2017/03/22 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
详解使用angular-cli发布i18n多国语言Angular应用
2017/05/20 Javascript
浅谈ES6 模板字符串的具体使用方法
2017/11/07 Javascript
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
js实现内置计时器
2019/12/16 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[26:50]2018完美盛典DOTA2表演赛
2018/12/17 DOTA
Python编程实现的图片识别功能示例
2017/08/03 Python
如何利用python查找电脑文件
2018/04/27 Python
python文件写入write()的操作
2019/05/14 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
python mysql中in参数化说明
2020/06/05 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
python通过cython加密代码
2020/12/11 Python
捷克电器和DJ设备网上商店:Electronic-star
2017/07/18 全球购物
c语言常见笔试题总结
2016/09/05 面试题
Java面试题汇总
2015/12/06 面试题
求职信内容考虑哪几点
2013/10/05 职场文书
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers
Win11运行cmd提示“请求的操作需要提升”的两种解决方法
2022/07/07 数码科技