Vue Devtools 安装

https://chrome.google.com/webstore/search/vue%20devtools?hl=zh-CN 需要翻墙

过滤器

概念: Vue.js 允许你自定义过滤器, 可被用作一些常见的文本格式化, 过滤器可以用在两个地方: mustache插值和 v-bind表达式. 过滤器应该被添加在JavaScript表达式的尾部, 用"管道"符提示;

私有
<!-- 可以增加多个, 从左往右依次执行 -->
<td>{{ item.ctime | dataFormat('yyyy-mm-dd') | strRepace() }}</td> 
// 全局过滤器, 所有的vm实例都能调用;
Vue.filter('dateFormat', function (dataStr, pattern) {
  var dt = new Date(dataStr);
  var y = dt.getFullYear();
  var m = dt.getMonth() + 1;
  var d = dt.getDate();

  if (pattern.toLowerCase() === 'yyyy-mm-dd') {
    return `${y}-${m}-${d}`;
  } else {
    var hh = dt.getHours();
    var mm = dt.getMinutes();
    var ss = dt.getSeconds();
    return `${y}-${m}-${d} ${hh}:${mm}:${ss}`;
  }
});
私有
// 就近原则, 如果有两个过滤器, 优先调用私有过滤器
var app2 = new Vue({
  el: '#app2',
  data: {
    dt: new Date()
  },
  methods: {},
  filters: { // 定义私有过滤器   过滤器名称, 处理函数
    dateFormat: function (dateStr, pattern) {
      var dt = new Date(dateStr);
      var y = dt.getFullYear();
      // ES6字符串方法 String.prototype.padStart(MaxLength, fillString='');
      var m = (dt.getMonth() + 1).toString().padStart(2, '0');
      var d = dt.getDate().toString().padStart(2, '0');

      if (pattern.toLowerCase() === 'yyyy-mm-dd') {
        return `${y}-${m}-${d}`;
      } else {
        var hh = dt.getHours().toString().padStart(2, '0');
        var mm = dt.getMinutes().toString().padStart(2, '0');
        var ss = dt.getSeconds().toString().padStart(2, '0');
        return `${y}-${m}-${d} ${hh}:${mm}:${ss} ~~`;
      }
    }
  }
});
按键修饰符

Vue.js 内部提供了一些按键修饰符

.enter .tab .delete .esc .space .up .down .left .right

<input type="text" v-on:keyup.enter="">
自定义按键修饰符
Vue.config.keyCodes.f1 = 112;
自定义指令
全局
<input type="text" v-focus>
// 参数1: 指令的名称, 注意调用时, 前面要加 v-
// 参数2: 对象, 这个对象身上有一些指令相关的函数, 这些函数在特定的阶段, 执行相关操作
Vue.directive('focus', {
  // 注意: 在每个函数中, 第一个参数, 永远是el 表示被绑定了指定的那个元素, 这个el是一个原生的JS对象
  bind: function () { // 每当指令绑定到元素上的时候, 会立即执行 bind 这个函数, 只执行一次
  },
  inserted: function (el) { // 表示元素插入到DOM的时候, 只执行一次
    el.focus();
  },
  updated: function () { // 每当VNode更新的时候, 会执行 可能多次
  }
});
// 简写
Vue.directive('focus', function(el) {
    el.focus();
});
私有
<p v-color="'red'" v-font-weight="900" v-fontsize="30">{{ dt | dateFormat("") }}</p>
directives: {
  'color': {
    bind: function (el, binding) {
      el.style.color = binding.value;
    }
  },
  'font-weight': {
    bind: function (el, binding) {
      el.style.fontWeight = binding.value;
    }
  }
}
// 简写
directives: {
    'fontzise': function (el, binding) {
        el.style.fontSize = binding.value;
    }
}
Vue中的动画

动画能够提高用户体验;帮助用户更好理解页面中的功能;

使用过渡类名
/* v-enter 进入之前 元素的起始状态 此时还没有开始进入 */
/* v-leave-to 动画离开之后 离开的终止状态, 此时元素动画已经结束 */
.v-enter,
.v-leave-to {
  opacity: 0;
  transform: translateX(80px);
}
/* v-enter-active 入场动画的时间段 */
/* v-leave-active 出场动画时间段 */
.v-enter-active,
.v-leave-active {
  transition: all 0.4s ease-in;
}
d="app">
  <input type="button" value="button" @click="msg = !msg">
  <!-- 使用1. transition 元素 把需要控制的动画包裹起来 Vue 官方提供的
    v- 并不是必须的, 如果需要更改为其他可以 transition 的 name 属性中指定 例如: my 那么调用时就是 my-enter -->
  <transition name="" mode="">
    <h3 v-if="msg">H3</h3>
  </transition>
</div>
使用动画钩子函数
<div id="app">
  <input type="button" value="button" v-on:click="flag = !flag">
  <transition name="" mode="" @before-enter="beforeEnter" @enter="enter" @after-enter="afterEnter">
    <div class="ball" v-show="flag"></div>
  </transition>
</div>
methods: {
  // 注意: 动画钩子函数的第一个参数 el 表示, 要执行动画的那个 DOM元素 是个原生的JS对象
  beforeEnter(el) {  // 表示动画入场之前, 此时动画尚未开始, 可以在 before-enter 中设置 元素开始动画之前的起始样式
    el.style.transform = 'translate(0, 0)';
  },
  enter(el, done) { // enter 表示动画 开始之后的样式 这里设置 元素完成动画之后的结束状态
    el.offsetWidth;  // 这句话没有实际作用, 但是如果不写, 出不来动画效果 可以认为 el.offsetWidth 强制刷新动画
    el.style.transform = 'translate(150px, 450px)';
    el.style.transition = 'all 1s ease';
    // 这里的 done() 其实就是 afterEnter 这个函数, 也就是说 done 是 afterEnter 函数的引用
    done();
  },
  afterEnter(el) { // 动画完成之后 调用 after-enter
    console.log('ok');
    this.flag = !this.flag
  }
}
v-for 列表动画过渡
.v-enter,
.v-leave-to {
  opacity: 0;
  transform: translateY(40px);
}
.v-enter-active,
.v-leave-active {
  transition: all 0.5s ease;
}
<!-- 在实现列表过渡的时候, 如果需要过渡的元素的是通过v-for循环渲染出来的, 不能使用 transition 标签  需要使用 transitionGroup -->
<!-- 如果要为 v-for 循环渲染出来的元素设置动画, 必须为每一个 元素设置 :key 属性 -->
<!-- appear 给 transition-group 实现页面入场效果 -->
<!-- 通过 transition-group 设置 tag属性 执行 transition-group 设置为指定的属性 如果不指定渲染为 span 标签 -->
<transition-group appear tag="ul">
  <li v-for="(item, i) in list" :key="item.id" @click="del(i)">{{ item.id }} -- {{ item. name }}</li>
</transition-group>
var app = new Vue({
  el: '#app',
  data: {
    id: '',
    name: '',
    list: [
      {id: 1, name: 'mz'},
      {id: 2, name: 'we'},
      {id: 3, name: 'ls'},
      {id: 4, name: 'zs'},
    ]
  },
  methods: {
    add() {
      this.list.push({id: this.id, name: this.name});
      this.id = this.name = '';
    }
  }
});
/* 离场动画 固定写发 */
.v-move {
  transition: all 0.5s ease;
}
.v-leave-actice {
  /* width: 100%; */
  position: absolute;
}
相关文章

js 里面的键盘事件对应的键码

Vue 基础 day02的更多相关文章

  1. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十八║Vue基础: 指令(下)+计算属性+watch

    回顾 今天来晚辣,给公司做了一个小项目,一个瀑布流+动态视频控制的DEMO,有需要的可以联系我,公司的项目就不对外展示了(一个后端程序员真的要干前端了哈哈哈). 书接上文,昨天正式的开始了Vue的代码 ...

  2. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十九║Vue基础: 样式动态绑定+生命周期

    回顾 哈喽大家好,前后端分离系列文章又开始了,今天周一,还是感谢大家花时间来观看我写的博客,周末呢,没有写文章,但是也没有闲着,主要是研究了下遗留问题,看过之前文章的应该知道,之前的在AOP使用Red ...

  3. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十║Vue基础终篇:传值+组件+项目说明

    缘起 新的一天又开始啦,大家也应该看到我的标题了,是滴,Vue基础基本就到这里了,咱们回头看看这一路,如果你都看了,并且都会写了,那么现在你就可以自己写一个Demo了,如果再了解一点路由,ajax请求 ...

  4. python 全栈开发,Day89(sorted面试题,Pycharm配置支持vue语法,Vue基础语法,小清单练习)

    一.sorted面试题 面试题: [11, 33, 4, 2, 11, 4, 9, 2] 去重并保持原来的顺序 答案1: list1 = [11, 33, 4, 2, 11, 4, 9, 2] ret ...

  5. Vue 基础精讲

    Vue 基础精讲 Vue 官方文档:https://cn.vuejs.org/v2/guide/ VUE 实例 每个组件都是一个 vue 的实例. 一个 vue 项目是由实例组成的. vue 实例上有 ...

  6. Vue基础以及指令

    Vue 基础篇一   一.Vue框架介绍 之前大家学过HTML,CSS,JS,JQuery,Bootstrap,现在我们要学一个新的框架Vue~ Vue是一个构建数据驱动的web界面的渐进式框架. 目 ...

  7. 2-5 vue基础语法

    一.vue基础语法 语法: {{msg}} html赋值: v-html="" 绑定属性: v-bind:id="" 使用表达式: {{ok? "ye ...

  8. Vue 1-- ES6 快速入门、vue的基本语法、vue应用示例,vue基础语法

    一.ES6快速入门 let和const let ES6新增了let命令,用于声明变量.其用法类似var,但是声明的变量只在let命令所在的代码块内有效. { let x = 10; var y = 2 ...

  9. vue基础知识之vue-resource/axios

    Vue基础知识之vue-resource和axios(三)   vue-resource Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不需要使用jQuery的DOM选择器,就没 ...

随机推荐

  1. shell中通过读取输入yes no判断下一步如何处理

    if [ -d $r_item_rmgit ];then                            read -p "$r_item_rmgit exit, replace it ...

  2. Netty学习--第一章 JDK自带的BIO

    一.什么是BIO BIO是传统的通信技术,在BIO通信模型中,客户端发送请求给服务器,服务器每次都是会单独创建一个线程来监控客户端的请求,会为每个客户端创建一个线程来处理请求.当前服务器处理完成后,通 ...

  3. php内置函数分析range()

    PHP_FUNCTION(range) { zval *zlow, *zhigh, *zstep = NULL, tmp; , is_step_double = ; double step = 1.0 ...

  4. MASM DEBUG LINKER免费下载

    这资源全被CSDN霸占了,对于我这种不使用CSND的人,没积分,真TM不好找,搞个共享的. 网盘链接,永久有效 https://pan.baidu.com/s/1Ws5axrfos1cpWL9jyAE ...

  5. 继承父类的注入Bean

    Bcontroller 继承了 Acontroller ,Acontroller注入了一个API,通过API实现了一个功能“方法X”.在Bcontroller中调用 Acontroller 的“方法X ...

  6. Maven项目jar和war部署

    Spring Boot可以打成jar包,也可以打成war包.启动方式类有main函数做为入口,比如:java -jar xxx.jar.Spring Boot默认内置Tomcat服务器,当然也可以将w ...

  7. [CF1161C] Thanos Nim

    传送门 题意:\(2n\)堆石子,每堆\(a_i\)个,先手每次选中\(n\)堆石子,并从每堆中拿走任意个(可以不同).轮到某人时不足\(n\)堆则判负,问先手是否必胜.\(n\leq25,a_i\l ...

  8. HDU 5446 Unknown Treasure(lucas + 中国剩余定理 + 模拟乘法)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5446 题目大意:求C(n, m) % M, 其中M为不同素数的乘积,即M=p1*p2*...*pk, ...

  9. linux运维、架构之路-SSH远程管理服务

    一.SSH服务功能介绍 1.远程登录管理 提供类似telnet远程联机服务器的服务,即上面提到的SSH服务 2.远程传输文件 是类似FTP服务的sftp-server,借助SSH协议来传输数据的,提供 ...

  10. HDU 2243 考研路茫茫——单词情结 ( Trie图 && DP && 矩阵构造幂和 )

    题意 :  长度不超过L,只由小写字母组成的,至少包含一个词根的单词,一共可能有多少个呢?这里就不考虑单词是否有实际意义. 比如一共有2个词根 aa 和 ab ,则可能存在104个长度不超过3的单词, ...