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类中的公有变量和私有变量
Jul 24 Javascript
jQuery EasyUI API 中文文档 - NumberSpinner数值微调器使用介绍
Oct 21 Javascript
js有关元素内容操作小结
Dec 20 Javascript
JavaScript中的变量作用域介绍
Dec 31 Javascript
很棒的js选项卡切换效果
Jul 15 Javascript
基于vue2实现上拉加载功能
Nov 28 Javascript
全面介绍vue 全家桶和项目实例
Dec 27 Javascript
js实现按钮开关单机下拉菜单效果
Nov 22 Javascript
Vue2.0实现组件之间数据交互和通信操作示例
May 16 Javascript
layui table设置某一行的字体颜色方法
Sep 05 Javascript
javascript使用链接跨域下载图片
Nov 01 Javascript
微信小程序学习总结(一)项目创建与目录结构分析
Jun 04 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写入数据库类代码分享
2011/07/26 PHP
PHP原生模板引擎 最简单的模板引擎
2012/04/25 PHP
php获取参数的几种方法总结
2014/02/18 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
jQuery的学习步骤
2011/02/23 Javascript
JavaScript新窗口与子窗口传值详解
2014/02/11 Javascript
JavaScript表单通过正则表达式验证电话号码
2014/03/14 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
2016/11/23 Javascript
关于axios返回空对象的问题解决
2017/04/04 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
使用mpvue搭建一个初始小程序及项目配置方法
2018/12/03 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
2019/10/23 Javascript
详解小程序如何改变onLoad的执行时机
2019/11/01 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
[04:03][TI9趣味短片] 小鸽子茶话会
2019/08/20 DOTA
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
python使用mysql数据库示例代码
2017/05/21 Python
详解Python里使用正则表达式的ASCII模式
2017/11/02 Python
python实现三次样条插值
2018/12/17 Python
Python 脚本获取ES 存储容量的实例
2018/12/27 Python
使用PYTHON解析Wireshark的PCAP文件方法
2019/07/23 Python
Python 实现自动导入缺失的库
2019/10/29 Python
Python交互环境下打印和输入函数的实例内容
2020/02/16 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
CSS3 3D立方体效果示例-transform也不过如此
2016/12/05 HTML / CSS
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
Groupon比利时官方网站:特卖和网上购物高达-70%
2019/08/09 全球购物
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
大学生农村教师实习自我鉴定
2013/09/21 职场文书
学校师德承诺书
2014/05/23 职场文书
JavaScript ES6的函数拓展
2022/01/18 Javascript
MySQL之MyISAM存储引擎的非聚簇索引详解
2022/03/03 MySQL
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python