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 相关文章推荐
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
Nov 04 Javascript
下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
Sep 18 Javascript
JavaScript事件委托的技术原理探讨示例
Apr 17 Javascript
JavaScript中的原型链prototype介绍
Dec 30 Javascript
jQuery插件pagination实现无刷新分页
May 21 Javascript
无缝滚动的简单实现代码(推荐)
Jun 07 Javascript
Vue实现双向绑定的方法
Dec 22 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
Jan 17 Javascript
JavaScript中document.referrer的用法详解
Jul 04 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
Oct 20 Javascript
详解Eslint 配置及规则说明
Sep 10 Javascript
详解基于node.js的脚手架工具开发经历
Jan 28 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
php SQL之where语句生成器
2009/03/24 PHP
php实现给图片加灰色半透明效果的方法
2014/10/20 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
关于PHP中字符串与多进制转换函数的实例代码
2016/11/03 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
AngularJS优雅的自定义指令
2016/07/01 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
2016/08/05 Javascript
JavaScript的变量声明提升问题浅析(Hoisting)
2016/11/30 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
jQuery图片轮播功能实例代码
2017/01/29 Javascript
async/await与promise(nodejs中的异步操作问题)
2017/03/03 NodeJs
Node.js使用cookie保持登录的方法
2018/05/11 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
关于微信小程序登录的那些事
2019/01/08 Javascript
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
[56:35]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第二局
2016/02/27 DOTA
[02:42]岂曰无衣,与子同袍!DOTA2致敬每一位守护人
2020/02/17 DOTA
[54:19]完美世界DOTA2联赛PWL S2 Magma vs PXG 第二场 11.28
2020/12/01 DOTA
Python中的多重装饰器
2015/04/11 Python
python关键字and和or用法实例
2015/05/28 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
2018/12/10 Python
Django Rest framework三种分页方式详解
2019/07/26 Python
Python3的socket使用方法详解
2020/02/18 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
Nasty Gal英国:美国女性服饰销售网站
2021/03/02 全球购物
软件测试面试题
2015/10/21 面试题
项目建议书范文
2014/05/12 职场文书
健康教育评估方案
2014/05/25 职场文书
领导干部四风问题自我剖析材料
2014/09/25 职场文书
2016年公司新年寄语
2015/08/17 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书
演讲稿之开卷有益
2019/08/07 职场文书