vue.js指令和组件详细介绍及实例


Posted in Javascript onApril 06, 2017

大家好,本文给各位做一下vue.js一个最基本的概念介绍。

vue.js 指令

<div id="app">
  <div v-text="message"></div>
</div>
var app = new Vue({
 el: '#app',
 data: {
  message: 'Hello Vue!'
 }
})

这个例子我们会得到,v-text所在的div元素的内部插入了'Hello Vue!'这段字符串,那么我们为什么会产生这样一个结果呢,我们来分析一下:

vue.js指令和组件详细介绍及实例

这一步的意思是,实例化的这个Vue接管了#app元素,这里面的所有内容归我管,也就是说可以接受vue的功能指令。

vue.js指令和组件详细介绍及实例

第二步是在#app里, v-text指令被识别出来,它接受的参数是'message',vue获取到这个参数,并在自己实例化的data里查找叫message的属性,找到message的内容原来是'hello vue', 于是把'hello vue' 渲染到页面。

类似的指令,还有v-if,条件判断,v-for,列表渲染,v-on进行元素的事件绑定。等等。vue.js与页面也就是template进行交互,主要是通过这些内置指令来完成的。

vue.js 组件

开发前端页面,模块化有很多好处,比如公用的sidebar,比如公用的日期选择器。

模块化还有一个好处,就是简化开发逻辑,让项目具有扩展性。

vue.js的模块化主要体现在组件上,以组件为单位进行模块化。

我们可以在实例化vue对象之前,通过Vue.component方法来注册全局的组件,比如:

全局组件

// 告诉Vue,我需要一个组件叫做todo-item,它的配置如下,就是包含props和template那个对象
Vue.component('todo-item', {
 props: ['todo'],
 template: '<li>{{ todo.text }}</li>'
}) 
// 实例化一个vue对象,挂载在#app-7这个元素下,并且设定它的属性,groceryList,是一个数组
var app7 = new Vue({
 el: '#app-7',
 data: {
  groceryList: [
   { text: 'Vegetables' },
   { text: 'Cheese' },
   { text: 'Whatever else humans are supposed to eat' }
  ]
 }
})

模板:

<div id="app-7">
 <ol>
  <!--因为注册了全局的todo-item组件,所以在挂载范围内我们可以直接使用todo-item标签,来引用这个组件,-->
  <!--组件内部会被 todo-item配置表里的template替换,用来渲染。属性todo也是配置对象里规定的,可以接受的参数。-->
  <todo-item v-for="item in groceryList" v-bind:todo="item"></todo-item>
 </ol>
</div>

子组件

实际项目开发中,我们更多的使用的是子组件。

我们刚刚说的每个组件都有一个配置表,就是一个js对象,比如:

{
 props: ['todo'],
 template: '<li>{{ todo.text }}</li>'
}

我们把这份配置引入到实例化对象里,就可以成为这个vue对象的子组件,比如:

new Vue({
  components: {
    'component-a' : {
       props: ['todo'],
       template: '<li>{{ todo.text }}</li>'
    }
  }
})

这样的话,我们和之前全局组件一样,也可以在实例化对象挂载的范围内,直接使用<component-a>标签来引用组件。

那么接下来,我们考虑一下,子组件里也可以有自己的子组件,比如:

new Vue({
  components: {
    'component-a' : {
       props: ['todo'],
       template: '<li>{{ todo.text }}</li>',
       components: {
          'component-b' : {
             template: 'i am component b',
             components: {
                ...
             }
          }
       }
    }
  }
})

那么这样下去,我们可以有无数个子组件,形成一个组件树:

vue.js指令和组件详细介绍及实例

所以,一个vue.js架构的网站,我们可以看成是一个个组件的开发,最终存在一个根节点,就是项目里唯一实例化的Vue对象,而这一个个组件,其实就是一份份配置对象,以及它们对应的template 模板(html片段)。

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

Javascript 相关文章推荐
JS之相等操作符详解
Sep 13 Javascript
Vuex之理解Mutations的用法实例
Apr 19 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
May 18 Javascript
JS中双击和单击事件冲突的解决方法
Apr 09 Javascript
Vue项目查看当前使用的elementUI版本的方法
Sep 27 Javascript
vue 指令之气泡提示效果的实现代码
Oct 18 Javascript
Node.js net模块功能及事件监听用法分析
Jan 05 Javascript
如何利用ES6进行Promise封装总结
Feb 11 Javascript
巧妙运用v-model实现父子组件传值的方法示例
Apr 07 Javascript
JS实现根据详细地址获取经纬度功能示例
Apr 16 Javascript
vue实现导航菜单和编辑文本的示例代码
Jul 04 Javascript
JavaScript中的Proxy对象
Nov 27 Javascript
javascript闭包功能与用法实例分析
Apr 06 #Javascript
深入理解 JavaScript 中的 JSON
Apr 06 #Javascript
ES6中module模块化开发实例浅析
Apr 06 #Javascript
ES6中class类用法实例浅析
Apr 06 #Javascript
ES6中Proxy代理用法实例浅析
Apr 06 #Javascript
ES6中Symbol类型用法实例详解
Apr 06 #Javascript
vue中mint-ui环境搭建详细介绍
Apr 06 #Javascript
You might like
如何选购合适的收音机
2021/03/01 无线电
php 301转向实现代码
2008/09/18 PHP
PHP提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
关于PHP文件的自动运行方法分析
2016/05/13 PHP
php实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
PHP递归遍历指定文件夹内的文件实现方法
2016/11/15 PHP
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
jquery实现无限分级横向导航菜单的方法
2015/03/12 Javascript
js实现缓冲运动效果的方法
2015/04/10 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
JS键盘版计算器的制作方法
2016/12/03 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
js编写简单的计时器功能
2017/07/15 Javascript
AngularJS使用ui-route实现多层嵌套路由的示例
2018/01/10 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
2018/08/18 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
详解Vue的watch中的immediate与watch是什么意思
2019/12/30 Javascript
Vue解析剪切板图片并实现发送功能
2020/02/04 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
Python判断操作系统类型代码分享
2014/11/22 Python
全面了解python中的类,对象,方法,属性
2016/09/11 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
2018/01/26 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
opencv3/C++图像像素操作详解
2019/12/10 Python
HTML5 Canvas阴影使用方法实例演示
2013/08/02 HTML / CSS
Aquatalia官网:意大利著名鞋履品牌
2019/09/26 全球购物
益模软件Java笔试题
2012/03/27 面试题
应届生体育教师自荐信
2013/10/03 职场文书
机电专业大学生求职信
2013/10/04 职场文书
给护士表扬信
2014/01/19 职场文书
税务干部鉴定材料
2014/02/11 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL
php去除deprecated的实例方法
2021/11/17 PHP
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS