最细致的vue.js基础语法 值得收藏!


Posted in Javascript onNovember 03, 2016

介绍

前段时间接触到一个库叫做Vue.js, 个人感觉很棒,所以整理了一篇博文做个介绍。

Vue读音/vju:/,和view类似。是一个数据驱动的web界面库。Vue.js只聚焦于视图层,可以很容易的和其他库整合。代码压缩后只有24kb。

可以去 这里下载 。自己整理了一个Vue.js的demo, https://github.com/chenhao-ch/demo-vue

快速入门
以下代码是Vue.js最简单的例子, 当input中的内容变化时,p节点的内容会跟着变化。

<!-- html -->
<div id="demo">
 <p>{{message}}</p>
 <input v-model="message">
</div>
new Vue({
 el: '#demo',
 data: {
  message: 'Hello Vue.js!'
 }
})

语法介绍

数据绑定
数据绑定就是指将js中的变量自动更新到html中。如下代码, message的默认值是“Hello Vue.js!”, 那么当页面启动时,html中的默认值会被设置成“Hello Vue.js”

<!-- html -->
<div id="demo">
 <p>{{message}}</p>
 <input v-model="message">
</div>
new Vue({
 el: '#demo',
 data: {
  message: 'Hello Vue.js!'
 }
})

如果要输出原生的html,可以使用三个大括号来实现

<p>{{{messageHtml}}}</p>

也可以做表达式的绑定

<div>{{length - 1}}</div>
<div>{{isShow ? 'block' : 'none'}}</div>

过滤器
表达式后面可以添加过滤器,对输出的数据进行过滤。

<div>{{ message | capitalize }}</div>

自定义过滤器
Vue.js运行自己定义过滤器。比如:

Vue.filter('wrap', function (value, begin, end) {
 return begin + value + end;
})
<!-- 'vue' => 'before vue after' -->
<span>{{ message | wrap 'before' 'after' }}</span>

指令

指令是特殊的带有前缀v-的特性。当表达式的值发生变化时,响应应用特定的行为到DOM。

<!-- 当greeting为true时,才显示p节点 -->
<p v-if="greeting">hello</p>
<!-- 绑定href属性为js中url的值 -->
<a v-bind:href="url"></a>
<!-- 绑定事件,btnClick是js方法 -->
<button v-on:click="btnClick"></button>

bind,on指令可以进行缩写

<a v-bind:href="url"></a>
<a :href="url"></a>

<button v-on:click="btnClick"></button>
<button @click="btnClick"></button>

自定义指令

Vue.directive('demo', {
 bind: function () {
  // 准备工作
  // 例如,添加事件处理器或只需要运行一次的高耗任务
 },
 update: function (newValue, oldValue) {
  // 值更新时的工作
  // 也会以初始值为参数调用一次
 },
 unbind: function () {
  // 清理工作
  // 例如,删除 bind() 添加的事件监听器
 }
})

html模板

Vue.js支持对js对象进行判断(if), 循环(for)输出。类似于前端模板。

<!-- 判断,如果ok为true,则显示yes, 如果为false, 显示no -->
<h1 v-if="ok">Yes</h1>
<h1 v-else>No</h1>

<!-- 类似于v-if, v-if是是否加节点, v-show是display是否为none -->
<h1 v-show="ok">Hello!</h1>

<!-- 循环, 对items属性进行循环。 track-by指item的是否重复,对重复的进行服用 -->
<!-- 循环中, $index表示数组第n个元素; $key表示对象的key -->
<ul id="example-1">
 <li v-for="item in items" track-by="_uid">
  {{ $index }} : {{ item.message }}
 </li>
</ul>
var example1 = new Vue({
 el: '#example-1',
 data: {
  items: [
   {_uid: '1', message: 'Foo' },
   {_uid: '2', message: 'Bar' }
  ]
 }
})

样式绑定

样式也可以根据js中的变量来动态确定。

<!-- isA 为true时, class多一个class-a -->
<div class="static" v-bind:class="{ 'class-a': isA, 'class-b': isB }"></div>
<!-- classA, classB 两个变量的值设置成class -->
<div v-bind:class="[classA, classB]">

<!-- 绑定style, 自动添加前缀,styleObject里面是style键值对 -->
<div v-bind:style="styleObject"></div>

事件绑定

可以使用v-on指令来监听DOM事件。

<div id="example-2">
 <button v-on:click="say('hi', $event)">Say Hi</button>
 <button v-on:click="say('what', $event)">Say What</button>
</div>
new Vue({
 el: '#example-2',
 methods: {
  say: function (msg, event) {
   alert(msg);
   event.preventDefault();
  }
 }
})

常见的阻止冒泡,禁止默认行为等event方法可以通过修饰符来快速处理。

<!-- 禁止冒泡 -->
<a v-on:click.stop='do'></a>
<!-- 禁止冒泡和默认行为 -->
<a @click.stop.prevent="do"></a>

对特殊按键生效也可以使用修饰符

<!-- keyCode是13的时候出发。 -->
<input v-on:keyup.13="submit" />
<input v-on:keyup.enter="submit" />
<!-- 支持的键名有: enter,tab,delete,esc,space,up,down,left,right -->

组件
组件系统是 Vue.js 另一个重要概念,因为它提供了一种抽象,让我们可以用独立可复用的小组件来构建大型应用。

注册
通过Vue.extend()来定义一个组件,Vue.component()来注册组件。

<div id="box">
 <tree></tree>
</div>
// 定义
var Tree = Vue.extend({
 template: '<div>This is a tree!</div>'
});
// 注册
Vue.component('tree', Tree);
// 开始渲染
new Vue({
 el: '#box'
});

// 定义,注册可以合并成一步。下面的代码和上面一样
Vue.component('tree', {
 template: '<div>This is a tree!</div>'
});
new Vue({
 el: '#box'
});

渲染结果为:

<div id="box">
 <div>This is a tree!</div>
</div>

还可以进行局部注册

var Child = Vue.extend({ /* ... */ })

var Parent = Vue.extend({
 template: '...',
 components: {
  'my-component': Child
 }
})

props
props用于父组件向子组件传递数据。

Vue.component('child', {
 props: ['childMsg'],
 // prop 可以用在模板内
 // 可以用 `this.msg` 设置
 template: '<span>{{ childMsg }}</span>'
});
<child child-msg="hello"></child>

动态props, 当父组件的数据变化时,需要通知子组件跟着变化。

<input v-model="parentMsg" />
<child v-bind:child-msg="parentMsg"></child>

父子组件通信

当父组件数据变化时,可以通过props来通知子组件,子组件状态变化时,可以利用事件的冒泡来通知父组件。

子组件可以用this.$parent访问它的父组件。父组件有一个数组this.$children,包含它所有的子元素。

例子:

<!-- 子组件模板 -->
<template id="child-template">
 <input v-model="msg">
 <button v-on:click="notify">Dispatch Event</button>
</template>

<!-- 父组件模板 -->
<div id="events-example">
 <p>Messages: {{ messages | json }}</p>
 <child></child>
</div>
// 注册子组件
// 将当前消息派发出去
Vue.component('child', {
 template: '#child-template',
 data: function () {
  return { msg: 'hello' }
 },
 methods: {
  notify: function () {
   if (this.msg.trim()) {
    this.$dispatch('child-msg', this.msg) // 触发child-msg事件
    this.msg = ''
   }
  }
 }
})

// 启动父组件
// 将收到消息时将事件推入一个数组
var parent = new Vue({
 el: '#events-example',
 data: {
  messages: []
 },
 // 在创建实例时 `events` 选项简单地调用 `$on`
 events: {
  'child-msg': function (msg) { // 监听到 child-msg事件
   // 事件回调内的 `this` 自动绑定到注册它的实例上
   this.messages.push(msg) // messages改变自动修改html内容
  }
 }
})

上面这种写法child-msg事件触发后,的执行方法不直观。 所以可以采用v-on绑定事件。

<!-- 当child-msg触发时, 执行父组件的handleIt方法。 -->
<child v-on:child-msg="handleIt"></child>

构建大型应用

在典型的 Vue.js 项目中,我们会把界面拆分为多个小组件,每个组件在同一地方封装它的 CSS 样式,模板和 JavaScript 定义,这么做比较好。如上所述,使用 Webpack 或 Browserify 以及合适的源码转换器,我们可以这样写组件:

最细致的vue.js基础语法 值得收藏!

当然也可以使用预处理器:

最细致的vue.js基础语法 值得收藏!

本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。

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

Javascript 相关文章推荐
JavaScript 面向对象之命名空间
May 04 Javascript
js 静态动态成员 and 信息的封装和隐藏
May 29 Javascript
jQuery页面滚动浮动层智能定位实例代码
Aug 23 Javascript
Jquery 实现表格颜色交替变化鼠标移过颜色变化实例
Aug 28 Javascript
javascript中callee与caller的区别分析
Apr 20 Javascript
D3.js实现雷达图的方法详解
Sep 22 Javascript
微信小程序之购物车功能
Sep 23 Javascript
微信小程序显示下拉列表功能【附源码下载】
Dec 12 Javascript
微信小程序时间控件picker view使用详解
Dec 28 Javascript
no-vnc和node.js实现web远程桌面的完整步骤
Aug 11 Javascript
vue实现浏览器全屏展示功能
Nov 27 Javascript
React倒计时功能实现代码——解耦通用
Sep 18 Javascript
AngularJS创建自定义指令的方法详解
Nov 03 #Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
Nov 03 #Javascript
3种不同的ContextMenu右键菜单实现代码
Nov 03 #Javascript
利用纯Vue.js构建Bootstrap组件
Nov 03 #Javascript
jQuery下拉菜单的实现代码
Nov 03 #Javascript
AngularJS辅助库browserTrigger用法示例
Nov 03 #Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
Nov 03 #Javascript
You might like
使用eAccelerator加密PHP程序
2008/10/03 PHP
php打造智能化的柱状图程序,用于报表等
2015/06/19 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
2019/03/07 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
javascript天然的迭代器
2010/10/29 Javascript
工作需要写的一个js拖拽组件
2011/07/28 Javascript
jquery应该如何来设置改变按钮input的onclick事件
2012/12/10 Javascript
jQuery阻止同类型事件小结
2013/04/19 Javascript
js中parseInt函数浅谈
2013/07/31 Javascript
如何动态的导入js文件具体该怎么实现
2014/01/14 Javascript
原生javaScript实现图片延时加载的方法
2014/12/22 Javascript
Javascript中数组方法汇总(推荐)
2015/04/01 Javascript
举例详解JavaScript中Promise的使用
2015/06/24 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
jQuery数组处理函数整理
2016/08/03 Javascript
jQuery Pagination分页插件使用方法详解
2017/02/28 Javascript
微信小程序时间标签和时间范围的联动效果
2019/02/15 Javascript
javascript sort()对数组中的元素进行排序详解
2019/10/13 Javascript
JS实现容器模块左右拖动效果
2020/01/14 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
Python 的 with 语句详解
2014/06/13 Python
简单谈谈python的反射机制
2016/06/28 Python
对命令行模式与python交互模式介绍
2018/05/12 Python
python计算两个地址之间的距离方法
2018/06/09 Python
python实现用户名密码校验
2020/03/18 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
Python3自定义json逐层解析器代码
2020/05/11 Python
纯CSS3打造属于自己的“小黄人”
2016/03/14 HTML / CSS
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
员工考核管理制度
2014/02/02 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
2014年党总支工作总结
2014/12/18 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
党支部培养考察意见
2015/06/02 职场文书
2019邀请函格式及范文
2019/05/20 职场文书
Spring Boot配合PageHelper优化大表查询数据分页
2022/04/20 Java/Android