Vuejs 写法实例

原文地址:http://www.jianshu.com/p/293387d240b2

Hello World

<div id="app">{{ message }}<button v-on:click="clickMe()">点击</button> <button v-on:click="clickMe">无参数的简写</button> </div>
new Vue({el: '#app', data: { message: 'Hello Vue.js!' }, methods: { clickMe: function(){} } });

指令

循环

循环数组

<!-- Vue 1 这么写 -->
<li v-for="item in items"> 第{{ $index }}条:{{ item.message }}</li> <div v-for="item in items" track-by="id"> <!-- Vue 2 这么写 --> <li v-for="(item, index) in items"> 第{{ index }}条:{{ item.message }}</li> <div v-for="item in items" v-bind:key="item.id">

循环对象

<!-- Vue 1 这么写 -->
<li v-for="(key, value) in obj"></li> <!-- Vue 2 这么写 --> <li v-for="(value, key) in obj"></li>

循环数字

<span v-for="n in 10">{{ n }} </span> <!-- Vue 1 从0开始,Vue 2从1开始 -->

条件

<!-- 如果ok为false, 不输出在 HTML 中 -->
<div v-if="ok">Yes</div> <div v-else>No</div> <!-- 如果ok为false,只是 display:none 而已 --> <h1 v-show="ok">Hello!</h1>

事件绑定

<button v-on:click="say('hi')">点击</button> <!-- 简写 --> <button @click="say('hi')">点击</button> <!-- 传入 event 对象 --> <button @click="say('hi', $event)">点击</button> <!-- 阻止单击事件冒泡 --> <button @click.stop="doSth">点击</button> <!-- 阻止默认行为 --> <button @submit.prevent="doSth">点击</button> <!-- 修饰符可以串联 --> <a @click.stop.prevent="doThat"></a> <!-- 按键修饰符:回车时才会执行 --> <input @keyup.13="submit"><!-- 13 为 keycode --> <input @keyup.enter="submit"> <!-- 支持的全部按钮为 enter, tab, delete, space, up, down, left, right 字母 -->

表单的双向绑定

<input type="text" v-model="message"> <!-- 自定义选中值。否则 选中为value值,不选为空 --> <input type="checkbox" v-model="toggle" v-bind:true-value="a" v-bind:false-value="b">

绑定属性

<div v-bind:class="{ 'class-a': isA, 'class-b': isB }"></div> <div v-bind:class="classArr"></div> <!-- classArr 是一个数组 --> <!-- 简写 --> <div :class="{ 'class-a': isA, 'class-b': isB }"></div> <div :style="{ color: activeColor, fontSize: fontSize + 'px' }"></div> <img :src="imgSrc"> <a :href="baseURL + '/path'">

在 Vue 2 中,如果属性值是变量,必须用绑定属性的写法。

// wrong
<img src="{{imgSrc}}">
// right
<img :src="imgSrc">

避免闪烁: v-cloak

[v-cloak] {display: none;
}
<div v-cloak>{{ message }} </div>

不会显示 <div> 的内容,直到编译结束。

单向绑定

单向绑定的意思是,即使绑定变量的值发生变化,显示的内容仍旧就是最初绑定时候的值。

<!-- Vue 1 这么写 -->
<span>This will never change: {{* msg }}</span> <!-- Vue 2 不支持 -->

输出 HTML

<!-- Vue 1 这么写 -->
<div>{{{ raw_html }}}</div> <!-- {{}} 中的 HTML 内容的会转为纯文本 --> <!-- Vue 2 这么写 --> <div v-html="raw_html"></div>

计算属性

<div id="demo">{{fullName}}</div>
new Vue({data: {firstName: 'Foo', lastName: 'Bar' }, computed: { fullName: function () { return this.firstName + ' ' + this.lastName } } });

自定义指令

Vue.directive('my-directive', {bind: function () {// 准备工作 // 例如,添加事件处理器或只需要运行一次的高耗任务 this.el;// 添加指令的元素 this.vm.$get(name)// 获得该指令的上下文 ViewModel this.expression;// 指令的表达式的值 }, update: function (newValue, oldValue) { // 值更新时的工作 // 也会以初始值为参数调用一次 }, unbind: function () { // 清理工作 // 例如,删除 bind() 添加的事件监听器 } })
<div v-my-directive="someValue"></div>

监听数据变化

new Vue({data: {firstName: 'Foo' }, watch: { firstName: function (val, oldVal) { } } });

过滤器

{{ msg | capitalize }}// 'abc' => 'Abc'

常见内置过滤器
capitalize, uppercase, lowercase, json, limitBy, filterBy。所有见这里。

Vue 2 中把这些内置的过滤器都删除了。

自定义过滤器

Vue.filter('wrap', function (value, begin, end) { return begin + value + end; });
<!-- 'hello' => 'before hello after' -->
<!-- Vue 1 这么写 -->
<span v-text="message | wrap 'before' 'after'"></span> <!-- Vue 2 这么写 --> <span v-text="message | wrap('before', 'after')"></span>

生命周期相关的钩子函数

// Vue 1
new Vue({created: function(){}, beforeCompile: function(){}, compiled: function(){}, ready: function(){},// DOM 元素已经加入到HTML中 beforeDestroy: function(){}, destroyed: function(){} }); // Vue 2 new Vue({ created: function(){}, mounted : function(){},// 相对与 1 中的 ready beforeDestroy: function(){}, destroyed: function(){} });

过渡效果

<!-- Vue 1 这么写 -->
<div v-if="show" transition="my-transition"></div> <!-- Vue 2 这么写 --> <transition v-bind:name="my-transition"> <!-- ... --> </transition>
/* 必需 */
.my-transition-transition {transition: all .3s ease; } /* .my-transition-enter 定义进入的开始状态 */ .my-transition-enter{} /* .my-transition-leave 定义离开的结束状态 */ .my-transition-leave {}

组件

Vue 2 和 Vue 1 的组件的区别有些大。

Vue 1

定义和调用组件

<my-compprop="literal string":prop1="defaultOneWay":prop2.sync="twoWay" :prop3.once="oneTime"> </my-comp>
Vue.component('my-comp', {template: 'html strings', props: { prop: String, prop1: { type: Number, required: true }, prop2: { type: Number, default: 88 }, // 对象/数组的默认值应当由一个函数返回 prop3: { type: Object, default: function () { return { msg: 'hello' } } }, // 自定义验证函数 prop4: { validator: function (value) { return value > 10 } } }, data: functin(){ return { } } }

父子组件通信

// 子组件
var child = new Vue.component('child', { events: { 'parent-msg': function (msg) {} } }); // 子组件向父组件传消息 child.$dispatch('child-msg', child.msg); // 父组件 var parent = new Vue({ events: { 'child-msg': function (msg) { // 父组件向所有子组件传消息 this.$broadcast('parent-msg', 'received it'); } } });

this.$parent 访问它的父组件。
this.$root 访问它的根组件。
this.$children 访问它的子组件。

小技巧

渲染一个包含多个元素的块

<template v-for="item in items"> <li>{{ item.msg }}</li> <li class="divider"></li> </template> <template v-if="user"> <img :src="user.avatarUrl" alt=""> <div class="name">{{user.name}}</div> </template>

template 用于包含多个元素的块,最终的渲染结果不会包含 template 元素。

Vue.set 和 Vue.delete

用于解决 不能检测到属性添加,属性删除的限制。

Vue.nextTick

// 修改数据
vm.msg = 'Hello'
// DOM 没有更新
Vue.nextTick(function () { // DOM 更新了 })

Vue 在检测到数据变化时是异步更新 DOM 的。具体见 异步更新队列。vm 上也有 this.$nextTick

vue 插件

路由: vue-router

官方文档

定义路由

var Vue = require('vue');
var VueRouter = require('vue-router'); Vue.use(VueRouter); router.map({ '/login': {component: require('login')}, '/user/:': {component: ...}, // 异步加载组件。加载器用的 webpack '/another': {component: function(resolve) { require.ensure([], function(require) { resolve(require('...')); }); }}, }); router.redirect({ '*': '/login' }); // 默认路由 router.beforeEach(function(transition) { // console.info('show loading'); transition.next(); }).afterEach(function(transition) { // console.info('hide loading'); }); // 启动 router.start(Vue.extend({}), '#app');

使用路由

<a v-link.literal="/a/b/c"></a> <a v-link="{ path: Foo }">Go to Foo</a>
new Vue({ready: function(){this.$route.path; this.$route.params; this.$route.query; }, methods: { jumpUrl: function () { // 代码跳转 this.$route.router.go('/a'); this.$route.router.go({ path: '/a', replace: true // 是否产生新的历史记录 }); this.$route.router.go({ name: 'a', // 具名路径 params: {}, query: {} }); } } });

异步请求: vue-resource

官网

Vue.http.get('/someUrl', [options]).then(successCallback, errorCallback);
Vue.http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);

拦截

Vue.http.interceptors.push(function(request, next) {var data = request.data;// 添加 url 前缀 request.url = serverPrefix + request.url; // 加请求参数 request.data.sessionid = localStorage.getItem('sessionid'); next(function (response) { if(登陆超时){ setTimeout(function () { router.go('/login'); }); } else { // modify response response.body = '...'; } }); });

支持 Promise

例如

Vue.http.post('/someUrl', [optinos]).then(function(res) { var data = res.data; return new Promise(function(resolve, reject) { if (!data.error) { reject() } else { resolve(data); } }.bind(this)); }) .then(function(res) { var data = res.data; return new Promise(function(resolve, reject) { Vue.http.post('/someUrl', data).then(function (res) { if(res.data){ resolve(); } }); }.bind(this)); }, failFn) .then(succFn, failFn);

其他

vm.$options.filters.filter名称 可以获取到具体的 filter

转载于:https://www.cnblogs.com/raocheng/articles/6298018.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构之堆:堆的介绍与python实现——12

堆的简单实现与代码实现 堆的定义 在定义堆&#xff08;heap&#xff09;之前&#xff0c;先回顾一下完全二叉树的定义&#xff1a; 完全二叉树&#xff1a;除了最后一层的结点有可能没有达到最大值外&#xff0c;其它层的结点值都达到最大值&#xff0c;此外最后一层的叶子…

OpenCV_07 直方图:灰度直方图+直方图均衡化

1 灰度直方图 1.1 原理 直方图是对数据进行统计的一种方法&#xff0c;并且将统计值组织到一系列实现定义好的 bin 当中。其中&#xff0c; bin 为直方图中经常用到的一个概念&#xff0c;可以译为 “直条” 或 “组距”&#xff0c;其数值是从数据中计算出的特征统计量&…

OpenCV_08 边缘检测:Sobel检测算子+Laplacian算子+Canny边缘检测

1 原理 边缘检测是图像处理和计算机视觉中的基本问题&#xff0c;边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。边缘的表现形式如下图所示&#xff1a; 图像边缘检测大幅度地减少了数据量&#xff0c;并且剔除了可以…

linux module_init

就像你写C程序需要包含C库的头文件那样&#xff0c;Linux内核编程也需要包含Kernel头文件&#xff0c;大多的Linux驱动程序需要包含下面三个头文件&#xff1a; #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> 其中&#xff…

数据结构之堆:堆的排序,Python代码实现——13

堆的排序&#xff0c;使用Python代码实现 上一节对堆进行了简单的实现&#xff0c;但是实现的堆只是部分有序&#xff08;父结点大于子结点&#xff0c;子结点之间无序&#xff09; 接下来我们实现对堆的所有元素进行升序排序 排序过程 实现步骤: 构造堆;得到堆顶元素,这个…

Anaconda 镜像源操作(查看配置删除)

一、Anaconda查看镜像配置 conda config --show channelschannels: https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/defaults二、添加清华大学镜像 conda config --add channels https://mirrors.tuna.t…

multi-line comment In file

写注释引起的编译问题&#xff1a; //s3c_gpio_cfgpin(pin, GTP_INT_CFG); \//s3c_gpio_cfgpin(pin, GTP_INT_CFG); \ 如果向上面那样写注释的话&#xff0c;就会引起问题&#xff0c;GCC&#xff0c;警告&#xff0c;有可能编译不通过&#xff0c;我遇到的问题就是编译不通过…

资治通鉴

本书于2017年1月15日开始看并于2017年1月17日看完&#xff0c;基本上只是culver看了一遍&#xff0c;只了解了故事而并没有分析&#xff0c;故事中每个人的思想和可能的想法&#xff0c;而且司马光对于宋朝以前的历史是截取了很多的片段记载的&#xff0c;并不能完整的了解历史…

【完美解决方案】module ‘cv2.cv2‘ has no attribute ‘xfeatures2d‘

一、问题描述 在学习openCV的过程中使用了SIFT的时候&#xff0c;发现书上的代码用不了&#xff0c;报错&#xff1a; module cv2.cv2 has no attribute xfeatures2d 二、问题原因 算法被申请了专利&#xff0c;将opencv版本退到3.4.2即可解决&#xff0c;必须小于等于Python…

数据结构之优先队列:优先队列的介绍与基础操作实现,Python代码实现——14

优先队列(Priority queue)的介绍 优先队列是计算机中一种抽象的数据结构类&#xff0c;它有着一个类似和队列或者堆的结构&#xff0c;但是其中每个元素额外有一个优先级别在一个优先队列中&#xff0c;一个高优先顺序的元素会先执行与低优先顺序的元素。在它的执行过程中&…

初识--百年孤独

转载于:https://www.cnblogs.com/xmyun/articles/6306290.html

OpenCV_09 模版匹配和霍夫变换:霍夫线检测+霍夫圆检测

1 模板匹配 1.1 原理 所谓的模板匹配&#xff0c;就是在给定的图片中查找和模板最相似的区域&#xff0c;该算法的输入包括模板和图片&#xff0c;整个任务的思路就是按照滑窗的思路不断的移动模板图片&#xff0c;计算其与图像中对应区域的匹配度&#xff0c;最终将匹配度最…

UICollectionView下拉使header放大模糊

模糊主要使用UIVisualEffectView&#xff0c;这只在ios8以后适用 //模糊的遮罩view property(nonatomic,strong) UIVisualEffectView *effectView; property(nonatomic,strong) CollectionviewLayout *layout;CollectionviewLayout *layout [[CollectionviewLayout alloc]init…

数据结构之优先队列:最小索引优先队列,Python代码实现——15

最小索引优先队列(Min index priority queue) 在之前实现的最大优先队列和最小优先队列,他们可以分别快速访问到队列中最大元索和最小元素,但是他们有一 个缺点,就是没有办法通过索引访问已存在于优先队列中的对象,并更新它们。 为了实现这个目的,在优先队列的基础上,学习一种…

OpenCV_10 傅里叶变换:频域滤波+CV的应用

1 傅里叶变换的理解 傅里叶变换是由法国的一位数学家Joseph Fourier在18世纪提出来的&#xff0c;他认为&#xff1a;任何连续周期的信号都可以由一组适当的正弦曲线组合而成。 傅里叶变换是描述信号的需要&#xff0c;它能够反映信号的特征&#xff0c;并可以使用特征值进行量…

extern 详解

在C环境下使用C函数的时候&#xff0c;常常会出现编译器无法找到obj模块中的C函数定义&#xff0c;从而导致链接失败的情况&#xff0c;应该如何解决这种情况呢&#xff1f; 答案与分析&#xff1a; C语言在编译的时候为了解决函数的多态问题&#xff0c;会将函数名和参数联合起…

OpenCV_11 轮廓检测:图像的轮廓+绘制轮廓+轮廓近似+边界矩形+椭圆拟合+直线拟合

1 图像的轮廓 轮廓可以简单认为成将连续的点&#xff08;连着边界&#xff09;连在一起的曲线&#xff0c;具有相同的颜色或者灰度。轮廓是图像目标的外部特征&#xff0c;这种特征对于我们进行图像分析&#xff0c;目标识别和理解等更深层次的处理都有很重要的意义。 轮廓提…

数据结构之平衡树:2-3查找树的介绍——16

平衡树&#xff08;AVL tree&#xff09; 引入 之前学习的树&#xff0c;都不是平衡的&#xff0c;查找时需要一个一个往内比较&#xff0c;一个结点只储存一个值&#xff0c;数据量存储较大&#xff0c;树的深度会非常的深&#xff0c;导致数据查询时效率会十分的低&#xf…

感谢CSDN管理员

感谢CSDN管理员&#xff0c;帮我重新找到了博客。 可恶的盗号者&#xff01;

OpenCV_12 图像分割:全阈值分割+自适应阈值分割+Otsu 阈值(大津法)+分水岭算法+GraphCut+GrabCut

1 图像分割 所谓图像分割指的是根据灰度、颜色、纹理和形状等特征把图像划分成若干互不交迭的区域&#xff0c;并使这些特征在同一区域内呈现出相似性&#xff0c;而在不同区域间呈现出明显的差异性。我们先对目前主要的图像分割方法做个概述&#xff0c;后面再对个别方法做详…