学习Vue组件实例


Posted in Javascript onApril 28, 2018

Vue实例

项目启动过程

看一下现在我们的项目,想想整个项目的启动过程是什么(以直接打开index.html的方法访问为例来说明)?

你首先打开了index.html,里面只有一个写了一个id='root'的div,还有你引入了打包之后的代码,然后Vue自己肯定运行了一下(可以认为是Vue初始化)。

接着,应该是执行了entry.js(因为打包是webpack打包的,你配置的入口文件就这一个)。

entry.js干了什么,是的,创建了一个Vue实例对象,然后这个对象管理的区域根据el属性知道,应该是index.html中id='root'的那个div,因此余下的事情就只有明白这个Vue实例对象是如何管理这片区域的就可以了,这就是接下来的内容了。

什么是Vue实例对象?

根据官方文档的说明:每个Vue应用都是通过用Vue函数创建一个新的Vue实例开始的。

你可以简单的理解,他就是一个普普通通的对象罢了,只不过这个对象被赋予了一些特殊的功能,让我们来了解一下他吧!

【我们接下来都是在entry.js里面创建的那个Vue对象上面进行实验的】

一个Vue实例对象创建的方法如下:

var vm=new Vue({
  //一堆配置
});

因此,接下来要说的就是一些常用的配置(不是全部,比较特殊的以后应该会说,毕竟开始就全部,我怕彼此心都太累了)。

Vue实例对象基本配置

【1】el:选择器| DOM结点

在我们的项目中,我们配置的是:

el:'#root'

这是一个字符串,有点类似CSS选择器,它会使用查找到的结点作为管理区域(当然还有别的CSS选择器也可以)。

除此之外,你还可以直接传递一个结点,比如现在我们修改一下代码:

el: document.getElementById('root')

这样也是可以了,你可以试试。

【2】render:(createElement:()=>VNode)=>VNode

上面的是ES6的箭头函数写法,举个栗子:

((x,y)=>x+y)(1,2)

上面ES6的写法等同于下面ES5的写法:

(function(x,y){
  return x+y;
})(1,2);

简单的说就是:(x,y)=>x+y就表示一个有二个参数x和y,返回x+y的函数,因此上面的函数用ES5的写法就是:

function(createElement){
  //createElement是一个函数,返回类型为VNode
  //这个函数的返回类型也应该是VNode
  return VNode;
}

备注:VNode是Vue编译生成的虚拟节点,想一下Jquery节点,还有Node节点,是不是味道很像。

因此,我把项目中的render稍微改一下:

render: function (createElement) {
  return createElement(App);
}

是不是很清晰了,说白了,就是一个最后返回值是VNode的函数。

因此看见节点这二个字,应该可以理解页面为什么显示的是App里面的模板了吧,如何路由调整为什么配置的是.vue文件大概也有点感觉了吧。

【3】router:VueRouter

这个比较容易理解,就是知道使用的路由配置是什么,由于项目中是:

router:router

看着很奇怪,我们稍微修改一下:

//上面的import routerObj from './router';这一句要跟着修改一下
router: routerObj

基本的就到这里,就三个,别的属性因为还关联很多东西,会一点点来说明。

Vue对象生命周期

官方的图我就不放了,感觉意义不大,推荐入门了以后可以去看看,因此后面的文章可能会说。

下面我们来先在entry.js里面修改一下代码,看看运行结果,下面是代码:

//根对象
var vm = new Vue({
  //挂载点
  el: document.getElementById('root'),
  //2.使用刚刚的路由配置
  router: routerObj,
  //启动组件
  render: function (createElement) {
    return createElement(App);
  },
  //下面是Vue对象的几种状态
  beforeCreate: function () {
    console.debug('Vue对象目前状态:beforeCreate');
  },
  created: function () {
    console.debug('Vue对象目前状态:created');
  },
  beforeMount: function () {
    console.debug('Vue对象目前状态:beforeMount');
  },
  mounted: function () {
    console.debug('Vue对象目前状态:mounted');
  },
  beforeUpdate: function () {
    console.debug('Vue对象目前状态:beforeUpdate');
  },
  updated: function () {
    console.debug('Vue对象目前状态:updated');
  },
  beforeDestroy: function () {
    console.debug('Vue对象目前状态:beforeDestroy');
  },
  destroyed: function () {
    console.debug('Vue对象目前状态:destroyed');
  }
});

运行一下看看控制台。

因此,就是说,Vue对象从创建前到最后死亡,在各个阶段状态改变的时候,都提供了一个钩子方法,你可以注册一下,如果你希望在特定状态改变的时候干点什么的话。

到这里,基本上Vue对象实例应该比较清楚了吧?看看我们的代码,应该只有那几个.vue的文件里面的东西没有说清楚了(本文就是把前面写过的代码都说清楚,后面就可以一个新知识点接着一个的来丰富项目,因为都没有疑惑了,学习起来应该不会痛苦了吧!)。

Vue组件实例

说明

Vue组件的定义方法不是只有我们之前写的建立.vue文件那一种,比如你还可以通过Vue.component()的方法来创建,不过这些都以后吧,我们这里就只说明.vue文件这一种(不喜欢一下子说太多,而且仔细想想,不就是API吗)。

【下面都是在PageTwo.vue里面进行修改,菜单名称修改为:Vue组件实例】

.vue文件的基本模板如下(下面都会是ES5的写法,本人还是不太喜欢ES6或者TS,原谅我,反正本质一样):

<template>
  
</template>

<script>
export default {
 //一些配置,和前面说的Vue实例类似
}
</script>

<style>

</style>

三个地方,分工明确:模板 + 控制 + 样式

接下来我们说明配置中常用的选项(很多具体的就留到后面一点点品位,好吧,留的有点多):

常用配置
【1】data

先看看PageTwo.vue现在的代码:

<template>
  <section>
    <input type="text" v-model="justDoIt">
    <div>
      输入的数据:{{justDoIt}}
    </div>
  </section>
</template>
<script>
export default {
 //一些配置
 data() {
  return {
   justDoIt: "初始化数据"
  };
 }
};
</script>
<style>

</style>

模板中的代码应该不用说了吧,前面一篇文章说的很清楚了,直接看看data。

其返回了一个键值对(还有别的写法,推荐你这样写,因为这里如果"初始化数据"这几个字是变量,这种写法形成了闭包,是安全的),在这里就是给当前组件对象是data里面添加了一个justDoIt的数据,然后上面或者别的地方才可以用,他就是干了这事情。

【2】methods

接着,我们添加一下methods属性:

methods: {
  doIt() {
   alert(this.justDoIt);
  }
}

其实methods和data类似,只不过是用来添加的不是数据,而是方法,因此,你现在可以在模板里面添加下面代码来调用这个方法(记住,添加的全部代码必须由一个标签包裹):

<input type="button" value="DoIt" v-on:click="doIt()">

v-on:click就是类似原生的onClick,不过因为是vue的方法,你应该用他的。

现在,你可以点击一下页面的按钮试一下,是不是很舒服。

【3】watch

这个属性是专门用来注册监听前面data里面注册的值改变的时候触发的方法集合,比如你添加下面的代码:

watch: {
  justDoIt: function(newval, oldval) {
   console.log("justDoIt改变了,新值为:" + newval + ",旧值为:" + oldval);
  }
 }

如何你运行一下,打开控制台,修改输入框的值的时候,是不是控制台时刻打印了这句话。

【4】computed

这个叫做计算属性,前面一篇文章说过了,不清楚的看看PageOne.vue,应该可以明白。

简单的说就是,它用到的data里面的值改变的时候,自己会重新计算。

生命周期
和Vue对象一样,也有类似的生命周期钩子,你可以试试,这里就随便提一下。

总结

说到这里,VUE应该是入门了,后面开始,就会针对一个个小点来说明,祝你好运!

Javascript 相关文章推荐
Js 订制自己的AlertBox(信息提示框)
Jan 09 Javascript
JavaScript Event学习第十一章 按键的检测
Feb 10 Javascript
node.js使用nodemailer发送邮件实例
Mar 10 Javascript
javascript弹出页面回传值的方法
Jan 28 Javascript
Jquery元素追加和删除的实现方法
May 24 Javascript
Bootstrap学习笔记之js组件(4)
Jun 12 Javascript
JS优化与惰性载入函数实例分析
Apr 06 Javascript
JavaScript 中调用 Kotlin 方法实例详解
Jun 09 Javascript
vue实现微信二次分享以及自定义分享的示例
Mar 20 Javascript
vue+ts下对axios的封装实现
Feb 18 Javascript
详解JavaScript 的执行机制
Sep 18 Javascript
浏览器JavaScript调试功能无法使用解决方案
Sep 18 Javascript
vue弹窗消息组件的使用方法
Sep 24 #Javascript
layui实现动态和静态分页
Apr 28 #Javascript
js实现二级菜单点击显示当前内容效果
Apr 28 #Javascript
Vue实现点击时间获取时间段查询功能
Aug 21 #Javascript
vue组件实现弹出框点击显示隐藏效果
Oct 26 #Javascript
vue.extend实现alert模态框弹窗组件
Apr 28 #Javascript
总结JavaScript在IE9之前版本中内存泄露问题
Apr 28 #Javascript
You might like
php 正则 过滤html 的超链接
2009/06/02 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
2010/08/21 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
2016/01/11 PHP
Yii2单元测试用法示例
2016/11/12 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
实例讲解PHP表单验证功能
2019/02/15 PHP
超级简单的图片防盗(HTML),好用
2007/04/08 Javascript
超级简单的jquery操作表格方法
2014/12/15 Javascript
如何编写高质量JS代码
2014/12/28 Javascript
JavaScript实现简单的数字倒计时
2015/05/15 Javascript
由ReactJS的Hello world说开来
2015/07/02 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
2015/08/09 Javascript
jQuery通过deferred对象管理ajax异步
2016/05/20 Javascript
String字符串截取的四种方式总结
2016/11/28 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
2017/06/04 Javascript
vue如何解决循环引用组件报错的问题
2018/09/22 Javascript
记一次vue去除#问题处理经过小结
2019/01/24 Javascript
vue设计一个倒计时秒杀的组件详解
2019/04/06 Javascript
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
Python判断字符串是否xx开始或结尾的示例
2019/08/08 Python
python的移位操作实现详解
2019/08/21 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
HTML5之SVG 2D入门8—文档结构及相关元素总结
2013/01/30 HTML / CSS
即时搜索数百万张门票:SeatsForEveryone.com
2018/08/26 全球购物
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
企业消防安全制度
2014/02/02 职场文书
家长通知书教师评语
2014/04/17 职场文书
班风口号
2014/06/18 职场文书
2014年教师节座谈会发言稿
2014/09/10 职场文书
交通事故委托书范本
2014/09/28 职场文书
中学生打架检讨书之500字
2019/08/06 职场文书
python将图片转为矢量图的方法步骤
2021/03/30 Python
为什么node.js不适合大型项目
2021/04/28 Javascript
Python采集壁纸并实现炫轮播
2022/04/30 Python
Python 避免字典和元组的多重嵌套问题
2022/07/15 Python