书接上文/思考反馈

  1. react,ng,vue作用差不多,那各个都有什么特点啊,实际工作中应该用哪一个?

答:其实在实际工作中,组员会通过讨论而选择框架;这三个框架都能解放你的工作量,也适合做单页面应用
【今天又是努力的一天】

案例:品牌管理案例

  1. 结合第一天所学知识,做案例;螺旋式提升开发能力

案例要点:

  1. 添加新品牌
  2. 删除品牌
  3. 筛选品牌


主体分成两大部分,先编写主体代码,再做添加。
分为1,添加信息区域 2,展示信息区域
添加信息区域代码如下,大致 包括 三个输入框,以及一个添加按钮

<div class="panel panel-primary"><div class="panel-heading"><h3 class="panel-title">添加品牌</h3></div><div class="panel-body form-inline"><label>Id:<input type="text" class="form-control" v-model="id"></label><label>Name:<input type="text" class="form-control" v-model="name" @keyup.f2="add"></label><!-- 在Vue中,使用事件绑定机制,为元素指定处理函数的时候,如果加了小括号,就可以给函数传参了 --><input type="button" value="添加" class="btn btn-primary" @click="add()"><label>搜索名称关键字:<!-- 注意: Vue中所有的指令,在调用的时候,都以 v- 开头 --><input type="text" class="form-control" v-model="keywords" id="search" v-focus v-color="'green'"></label></div></div>

信息展现区域,包括Id,Name,Time等信息的展示

<table class="table table-bordered table-hover table-striped"><thead><tr><th>Id</th><th>Name</th><th>Ctime</th><th>Operation</th></tr></thead><tbody><!-- 之前, v-for 中的数据,都是直接从 data 上的list中直接渲染过来的 --><!-- 现在, 我们自定义了一个 search 方法,同时,把 所有的关键字,通过传参的形式,传递给了 search 方法 --><!-- 在 search 方法内部,通过 执行 for 循环, 把所有符合 搜索关键字的数据,保存到 一个新数组中,返回 --><tr v-for="item in search(keywords)" :key="item.id"><td>{{ item.id }}</td><td v-text="item.name"></td><td>{{ item.ctime | dateFormat() }}</td><td><a href="" @click.prevent="del(item.id)">删除</a></td></tr></tbody></table>

完成以上步骤之后,请认真阅读下面知识点及步骤。

通过使用 过滤器,可以达到 重写时间的作用,比如 "2018-09-02T12:58:41.347Z",可以变为 2018-9-2 21:19:6

过滤器

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

1. 过滤器的定义

// 过滤器的定义语法Vue.filter('过滤器的名称', function(){})// 过滤器中的 function ,第一个参数,已经被规定死了,永远都是 过滤器 管道符前面 传递过来的数据/* Vue.filter('过滤器的名称', function (data) {return data + '123'}) */

以下例子,当句子中存在“单纯”自动换成其他

<body><div id="app"><p>{{ msg | msgFormat('疯狂+1', '123') | test }}</p></div><script>// 定义一个 Vue 全局的过滤器,名字叫做  msgFormatVue.filter('msgFormat', function (msg, arg, arg2) {// 字符串的  replace 方法,第一个参数,除了可写一个 字符串之外,还可以定义一个正则return msg.replace(/单纯/g, arg + arg2)})Vue.filter('test', function (msg) {return msg + '========'})// 创建 Vue 实例,得到 ViewModelvar vm = new Vue({el: '#app',data: {msg: '曾经,我也是一个单纯的少年,单纯的我,傻傻的问,谁是世界上最单纯的男人'},methods: {}});</script>
</body>// 过滤器的定义语法// Vue.filter('过滤器的名称', function(){})// 过滤器中的 function ,第一个参数,已经被规定死了,永远都是 过滤器 管道符前面 传递过来的数据/* Vue.filter('过滤器的名称', function (data) {return data + '123'}) */

注意!!!先后顺序,要先定义过滤器,在实例化vue,否则会Failed to resolve filter

修饰符的应用

 <script>// 全局的过滤器, 进行时间的格式化// 所谓的全局过滤器,就是所有的VM实例都共享的Vue.filter('dateFormat', function (dateStr, pattern = "") {// 根据给定的时间字符串,得到特定的时间var dt = new Date(dateStr)//   yyyy-mm-ddvar y = dt.getFullYear()var m = dt.getMonth() + 1var d = dt.getDate()// return y + '-' + m + '-' + dif (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}`}})// 自定义全局按键修饰符Vue.config.keyCodes.f2 = 113// 使用  Vue.directive() 定义全局的指令  v-focus// 其中:参数1 : 指令的名称,注意,在定义的时候,指令的名称前面,不需要加 v- 前缀, // 但是: 在调用的时候,必须 在指令名称前 加上 v- 前缀来进行调用//  参数2: 是一个对象,这个对象身上,有一些指令相关的函数,这些函数可以在特定的阶段,执行相关的操作Vue.directive('focus', {bind: function (el) { // 每当指令绑定到元素上的时候,会立即执行这个 bind 函数,只执行一次// 注意: 在每个 函数中,第一个参数,永远是 el ,表示 被绑定了指令的那个元素,这个 el 参数,是一个原生的JS对象// 在元素 刚绑定了指令的时候,还没有 插入到 DOM中去,这时候,调用 focus 方法没有作用//  因为,一个元素,只有插入DOM之后,才能获取焦点// el.focus()},inserted: function (el) {  // inserted 表示元素 插入到DOM中的时候,会执行 inserted 函数【触发1次】el.focus()// 和JS行为有关的操作,最好在 inserted 中去执行,放置 JS行为不生效},updated: function (el) {  // 当VNode更新的时候,会执行 updated, 可能会触发多次}})// 自定义一个 设置字体颜色的 指令Vue.directive('color', {// 样式,只要通过指令绑定给了元素,不管这个元素有没有被插入到页面中去,这个元素肯定有了一个内联的样式// 将来元素肯定会显示到页面中,这时候,浏览器的渲染引擎必然会解析样式,应用给这个元素bind: function (el, binding) {// el.style.color = 'red'// console.log(binding.name)// 和样式相关的操作,一般都可以在 bind 执行// console.log(binding.value)// console.log(binding.expression)el.style.color = binding.value}})// 创建 Vue 实例,得到 ViewModelvar vm = new Vue({el: '#app',data: {id: '',name: '',keywords: '', // 搜索的关键字list: [{ id: 1, name: '奔驰', ctime: new Date() },{ id: 2, name: '宝马', ctime: new Date() }]},methods: {add() { // 添加的方法// console.log('ok')// 分析:// 1. 获取到 id 和 name ,直接从 data 上面获取 // 2. 组织出一个对象// 3. 把这个对象,调用 数组的 相关方法,添加到 当前 data 上的 list 中// 4. 注意:在Vue中,已经实现了数据的双向绑定,每当我们修改了 data 中的数据,Vue会默认监听到数据的改动,自动把最新的数据,应用到页面上;// 5. 当我们意识到上面的第四步的时候,就证明大家已经入门Vue了,我们更多的是在进行 VM中 Model 数据的操作,同时,在操作Model数据的时候,指定的业务逻辑操作;var car = { id: this.id, name: this.name, ctime: new Date() }this.list.push(car)this.id = this.name = ''},del(id) { // 根据Id删除数据// 分析:// 1. 如何根据Id,找到要删除这一项的索引// 2. 如果找到索引了,直接调用 数组的 splice 方法/* this.list.some((item, i) => {if (item.id == id) {this.list.splice(i, 1)// 在 数组的 some 方法中,如果 return true,就会立即终止这个数组的后续循环return true;}}) */var index = this.list.findIndex(item => {if (item.id == id) {return true;}})// console.log(index)this.list.splice(index, 1)},search(keywords) { // 根据关键字,进行数据的搜索/* var newList = []this.list.forEach(item => {if (item.name.indexOf(keywords) != -1) {newList.push(item)}})return newList */// 注意:  forEach   some   filter   findIndex   这些都属于数组的新方法,//  都会对数组中的每一项,进行遍历,执行相关的操作;return this.list.filter(item => {// if(item.name.indexOf(keywords) != -1)// 注意 : ES6中,为字符串提供了一个新方法,叫做  String.prototype.includes('要包含的字符串')//  如果包含,则返回 true ,否则返回 false//  containif (item.name.includes(keywords)) {return item}})// return newList}}});// 如何自定义一个私有的过滤器(局部)var vm2 = new Vue({el: '#app2',data: {dt: new Date()},methods: {},filters: { // 定义私有过滤器    过滤器有两个 条件  【过滤器名称 和 处理函数】// 过滤器调用的时候,采用的是就近原则,如果私有过滤器和全局过滤器名称一致了,这时候 优先调用私有过滤器dateFormat: function (dateStr, pattern = '') {// 根据给定的时间字符串,得到特定的时间var dt = new Date(dateStr)//   yyyy-mm-ddvar y = dt.getFullYear()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} ~~~~~~~`}}},directives: { // 自定义私有指令'fontweight': { // 设置字体粗细的bind: function (el, binding) {el.style.fontWeight = binding.value}},'fontsize': function (el, binding) { // 注意:这个 function 等同于 把 代码写到了 bind 和 update 中去el.style.fontSize = parseInt(binding.value) + 'px'}}})// 过滤器的定义语法// Vue.filter('过滤器的名称', function(){})// 过滤器中的 function ,第一个参数,已经被规定死了,永远都是 过滤器 管道符前面 传递过来的数据/* Vue.filter('过滤器的名称', function (data) {return data + '123'}) */// document.getElementById('search').focus()</script>

学习Vue.js-Day2相关推荐

  1. eclipsevue代码怎么运行_[Java教程]使用eclipse初步学习vue.js操作

    [Java教程]使用eclipse初步学习vue.js操作 0 2017-11-26 19:00:06 一.vue.js的初步认识 https://unpkg.com/vue ">vu ...

  2. vue.js视频课程_在此免费课程中学习Vue.js! ✨

    vue.js视频课程 by ZAYDEK 由ZAYDEK 在此免费课程中学习Vue.js! ✨ (Learn Vue.js in this free course! ?✨) 让我们做点Vueseful ...

  3. vue.js 天气插件_天气检查我的项目以学习Vue.js

    vue.js 天气插件 天气 (vue-weather) Weather checking me project for learning Vue.js. 天气检查我的项目以学习Vue.js. Vie ...

  4. 学习vue.js 第一天

    最近听到很多人都在用Vue.js ,我也想凑凑热闹,来个入门 啥的 ,要不以后人家说,啥都不知道,多low 看到官网 是这样介绍Vue.js Vue.js(读音 /vjuː/, 类似于 view) 是 ...

  5. Vue.js - Day2

    品牌管理案例 添加新品牌 删除品牌 根据条件筛选品牌 1.x 版本中的filterBy指令,在2.x中已经被废除: filterBy - 指令 ​<tr v-for="item in ...

  6. 学习Vue.js实战(一)

    Vue.js是什么? Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架. (所谓Progressive,就是可以一步一步的有阶段性的使用vue.js.其简单小巧,压 ...

  7. 学习vue.js的自我梳理笔记

    基本语法格式: <script> new Vue({ el: '#app', data: { url: 'http://www.runoob.com' } }) </script&g ...

  8. 学习Vue.js入门,简单了解一下

    Vue开发入门 1.1 Vue框架的优点 Vue是 渐进式框架 , 出现在JavaScript之后,但因其易于使用.灵活.速度快,对JavaScript的主流地位有着很大的威胁. Vue 遵循 渐进增 ...

  9. 从0到1学习Vue.js,包含例子及实战项目(三)

    为什么80%的码农都做不了架构师?>>>    在之前两篇文章中,我们首先了解了Vue环境的搭建以及两个重要思想--路由和组件的学习,通过组件库中的按钮组件和导航组件,相信大家也开始 ...

  10. 可以不学html直接学vue吗,一个只学过HTML,CSS,JS的前端初学者在学习Vue.js之前还需要学习哪些知识?...

    看了大家的回答,感觉很多人都没说到点子上 大概大家对如何有效的掌握一门新的框架也是一头雾水吧 为了给题主解惑,以及各位如此耐心回答问题的朋友提供一个学习思路,所以我决定要抖点干货. 主题就是<如 ...

最新文章

  1. Keras卷积+池化层学习
  2. swift_018(Swift 的结构体)
  3. 中国碳纤维风电叶片行业“十四五”发展规划及投资可行性分析报告2022-2028年版
  4. delete表1条件是另一个表中的数据,多表连接删除
  5. 【视觉盛宴三】不好意思,这些线材接口的横截面真的没见过
  6. C++函数模板机制结论
  7. CSS3 animation动画,循环间的延时执行时间
  8. 美国国家安全原因致金沙江暂停收购飞利浦LED
  9. 页面布局_【三十七集】页面布局中的视觉流
  10. 如何判断sql server 2000 是否大了sp4补丁
  11. Android视频播放器
  12. xcode打包ipa配置手动配置证书
  13. linux图片裁剪工具,linux中如何使用终端裁剪图片?
  14. 开源数据分析平台Countly
  15. java逻辑思维练习
  16. Android中设置分割线
  17. PCB常用端子/排线
  18. 计算机科学与技术专业二本学校排名,二本计算机专业大学哪所最好?最好二本计算机类大学排名如何...
  19. 【QMT】给QMT量化交易软件安装和调用第三方库(举例通达信pytdx,MyTT,含代码)
  20. 如何判断两个QQ好友之间是否为好友关系

热门文章

  1. esp32cam与下载板的实际有效接线图
  2. 信号处理常用算法介绍
  3. Oracle imp字符集转换,imp/exp 字符集转换
  4. vue怎么引入js文件_Vue核心知识:8.3 vuex在vue-cli中的应用,文件之间的导出与引入...
  5. python语言编写的modbus协议_RTU Modbus从机的python脚本
  6. dict()与{},list()与[]性能对比
  7. AC自动机的使用案例
  8. setting an array element with a sequence.
  9. 统计一段英文中单词的个数c语言,C语言统计一篇英文短文中单词的个数实例代码...
  10. oracle设置导出权限,Oracle 创建 删除 用户 导出 导入 分配权限