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 相关文章推荐
js控制div及网页相关属性的代码
Dec 19 Javascript
jQuery实现原理的模拟代码 -6 代码下载
Aug 16 Javascript
Js注册协议倒计时的小例子
Jun 24 Javascript
Jquery 点击按钮自动高亮实现原理及代码
Apr 25 Javascript
jQuery中的$.ajax()方法应用
May 06 Javascript
jQuery判断元素上是否绑定了指定事件的方法
Mar 17 Javascript
详细解读AngularJS中的表单验证编程
Jun 19 Javascript
JQuery PHP图片在线裁剪实例
Jul 27 Javascript
d3.js中冷门却实用的内置函数总结
Feb 04 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
Apr 13 Javascript
简单实现jQuery手风琴效果
Aug 18 jQuery
Vue 过滤器filters及基本用法
Dec 26 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
解析PHP将对象转换成数组的方法(兼容多维数组类型)
2013/06/21 PHP
PHP调用C#开发的dll类库方法
2014/07/28 PHP
php函数与传递参数实例分析
2014/11/15 PHP
php中文字符串截取多种方法汇总
2016/10/06 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
js验证是否为数字的总结
2013/04/14 Javascript
JS定时器实例
2013/04/17 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
JQuery页面的表格数据的增加与分页的实现
2013/12/10 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
2014/06/15 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
node.js操作mongoDB数据库示例分享
2014/11/26 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
使用Script元素发送JSONP请求的方法
2016/06/12 Javascript
从零学习node.js之利用express搭建简易论坛(七)
2017/02/25 Javascript
Javascript中字符串相关常用的使用方法总结
2017/03/13 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
bootstrap tooltips在 angularJS中的使用方法
2019/04/10 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
2019/09/06 Javascript
转换layUI的数据表格中的日期格式方法
2019/09/19 Javascript
JS实现瀑布流效果
2020/03/07 Javascript
Python实现对比不同字体中的同一字符的显示效果
2015/04/23 Python
python中获得当前目录和上级目录的实现方法
2017/10/12 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
Python中print函数简单使用总结
2019/08/05 Python
tensorflow的计算图总结
2020/01/12 Python
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
Strathberry苏贝瑞中国官网:西班牙高级工匠手工打造
2020/10/19 全球购物
小学关爱留守儿童活动方案
2014/08/25 职场文书
党员对照检查材料整改措施思想汇报
2014/09/26 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
舌尖上的中国观后感
2015/06/02 职场文书