嗯,加油啦!!都是书里的东西,整理了一下,以后复习的时候看.
摘些最近看书的句子:
阳光之下,人各有份 ------《传道书》
迪安却不一样,他为了面包和性爱在社会上使劲打拼。
我不知道自己究竟是谁了,我远离家乡,旅途劳顿,疲倦不堪,寄身在一个从未讲过的旅馆房间,听到的是外面蒸汽的嘶嘶声....,在最初的奇特的十五分钟里,我真的不知道自己是谁。我并不惊恐;只觉得自己仿佛是另一个人,一个陌生人,我一生困顿,过着幽灵般的生活,
正因为没有立足之地,他对任何地方都不会感到厌倦,正应为无处可去,他任何地方都可以去,他老是在星光下进行。
-------------《在路上》
第1章初识Vuejs
Vue特点:简单小巧,渐进式.
简单小巧是指 Vue.js 压缩后大小仅有 17KB。
所谓渐进式(Progressive) ,就是你可以一步一 步、有阶段性地来使用 Vue.js,不必一开始就使用所有的东西。Vue 最独特的特性之一,是其非侵入性的响应式系统。比如你可以直接用脚本插入,也可以构建一个前端工程vue-cil。
Vue特性:解耦视图和数据,可复用的组件,前端路由,状态管理,虚拟的DOM技术
MWM 模式:Model-view-viewModel.模式.mvvm模式是由经典的MVC模式演变而来,。当 View (视图层)变化时,会自动更新到 ViewModel (视图模型),反之亦然。 View 和 ViewModel 之间通过双向绑定(tdata-binding)建立 联系.
Vue.js 是一个渐进式的 JavaScript 框架,根据项目需求,你可以选择从不同的维度来使用它。
第2章数据绑定和第一个Vue应用
el 用于指定一个页面中己存在的 DOM 元素来挂载 Vue 实例,它可以是 HTMLElement ,也可以是 css 选择器.
Vue 实例的 data 选项,可以声明应用内需要双向绑定的数据.
生命周期:
• created 实例创建完成后调用,此阶段完成了数据的观测等,但尚未挂载, $el 还不可用。 需要初始化处理一些数据时会比较有用,
• mounted el 挂载到实例上后调用,一般我们的第一个业务逻辑会在这里开始。 一般用于页面初始数据的展示.
• beforeDestroy 实例销毁之前调用。主要解绑一些使用 addEventListener 监听的事件等。
插值与表达式: 使用双大括号(Mustache 语法)“{{}}”是最基本的文本插值方法,它会自动将我们双向绑 定的数据实时显示出来,在{{}}中,除了简单的绑定属性值外,还可以使用 JavaScript 表达式进行简单的运算、 三元运算
v-pre >{{这里的内容是不会被编译的</ span>
过滤器:
Vue. js支持在{{}}插值的尾部添加一个管道符 “ ( | ) ” 对数据进行过滤,经常用于格式化文 本,比如字母全部大写、货币千位使用逗号分隔等。过滤的规则是自定义的, 通过给 Vue 实例添 加选项 filters 来设置,
指令与事件:
指令的主要职责就是当其表达式的值改变时,相应地将某些行为应用到 DOM 上,数据驱动 DOM 是 Vue.js 的核心理念,所以不到万不得已时不要主动操作 DOM,你只需要维护好数据, DOM 的事 Vue 会 帮你优雅的处理。Vue. 内置了很多指令,帮助我们快速完成常见的 DOM 操作,比如循环渲染、显示与隐藏等.
v-bind 的基本用途是动态更新 HTML 元素上的属性,比如 id、 class 等,
v-on 可以监 昕原生的 DOM 事件,除了 click 外,还有 dblclick、 keyup, mousemove 等。表达式可以是一个方 法名,这些方法都写在 Vue 实例的 methods 属性内,并且是函数的形式
第3章计算属性
在模板中双向绑定一些数据 或表达式了。但是表达式如果过长,或逻辑更为复杂时,就会变得雕肿甚至难以阅读和维护,所以在遇到复杂的逻辑时应该使用计算属性。
每一个计算属性都包含一个 getter 和一个 setter,我们上面的两个示例都是计算属性的默认用 法, 只是利用了 getter 来读取。在你需要时,也可以提供一个 setter 函数, 当手动修改计算属性的 值就像修改一个普通数据那样时,就会触发 setter 函数,执行一些自定义的操作,
计算属性除了上述简单的文本插值外,还经常用于动态地设置元素的样式名称 class 和内联样 式 style.
计算属性还有两个很实用的小技巧容易被忽略:一是计算属性可以依赖其他计算属性: 二是 计算属性不仅可以依赖当前 Vue 实例的数据,还可以依赖其他实例的数据.
计算属性缓存:
调用 methods 里的方法也可以与计算属性起到同样的 作用,计算属性是基于它的依赖缓存的。 一个计算属性所依赖的数据发生变化时,它才会重新取值,所以 text 只要不改变,计算属性也就不更新,对于一个获取当前时间的计算属性,即Data.now(),不是响应式依赖,计算属性的值不会更新,但对于methods的则不同,只要重新渲染,就会被执行.
第4章v-bind及class与style绑定
对象中也可以传入多个属性,来动态切换 class。另外,:class 可以与普通 class 共存.
当需要应用多个 class 时, 可以使用数组语法, 给:class 绑定一个数组,应用一个 class 列表.
如果直接在自定义组件上使用 class 或:class, 样式规则会直接应用到这个组件的根元素上,例 如声明一个简单的组件:
使用 v-bind:style (即:style) 可以给元素绑定内联样式,方法与:class 类似,也有对象语法和 数组语法,看起来很像直接在元素上写 CSS
第5章内置指令
v-cloak
不需要表达式,它会在 Vue 实例结束编译时从绑定的 HTML 元素上移除, 经常和 css 的 display: none;配合使用.避免{{}}闪现
v-once
也是一个不需要表达式的指令,作用是定义它的元素或组件只渲染一次,包括元素或 组件的所有子节点。首次渲染 后,不再随数据的变化重新渲染,将被视为静态内容,
条件渲染指令:v-if、 v-else-if、 v-else:
与 JavaScript 的条件语句 if else、 else if类似, Vue.js 的条件指令可以根据表达式的值在 DOM 中渲染或销毁元素/组件 ;
v-else-if 要紧跟 v-if, v-else 要紧Rli! v-else-if 或 v-if,表达式的值为真时, 当前元素/组件及所 有子节点将被渲染,为假时被移除。如果一次判断的是多个元素,可以在 Vue.js内置的<template> 元素上使用条件指令,最终渲染的结果不会包含该元素,
Vue 在渲染元素时,出于效率考虑,会尽可能地复用已有的元素而非重新渲染,
如果你不希望这样做,可以使用 Vue.jd提供的 key 属性,它可以让你自己决定是否要复用元 素, key 的值必须是唯一的
v-show 的用法与 v-if基本一致,
只不过 v-show 是改变元素的 css 属性 display 。当 v-show 表 达式的值为 false 时, 元素会隐藏,查看 DOM 结构会看到元素上加载了内联样式 display: none;,
v-if 与 v-show 的选择
v-if和 v-show 具有类似的功能,不过 v-if 才是真正的条件渲染 ,它会根据表达式适当地销毁 或重建元素及绑定的事件或子组件。若表达式初始值为 false,则一开始元素/组件并不会渲染,只 有当条件第一次变为真时才开始编译。而 v-show 只是简单的 css 属性切换 , 无论条件真与否,都会被编译 。相比之下, v-if更适合 条件不经常改变的场景,因为它切换开销相对较大,而 v-show 适用于频繁切换条件。
列表渲染指令 v-for:
当需要将一个数组遍历或枚举一个对象循环显示时,就会用到列表渲染指令 v-for。它的表达式需结合 in 来使用,类似 item in items 的形式.遍历对象属性时,有两个可选参数,分别是键名和索引.
数组更新
Vue 的核心是数据与视图的双向绑定 ,当我们修改数组时, Vue 会检测到数据变化,所以用 v-for 渲染的视图也会立即更新。 Vue 包含了一组观察数组变异的方法,使用它们改变数组也会触 发视图更新: push() pop() shift() unshift()splice() shift()reverse()
有些方法不会改变原数组,filter() concat() slice()
它们返回的是一个新数组,在使用这些非变异方法时,可以用新数组来替换原数组
Vue 在检测到数组变化时,并不是直接重新渲染整个列表,而是最大化地复用 DOM 元素。替换的数组中,含有相同元素的项不会被重新渲染,因此可以大胆地用新数组来替换旧数组,不用担 心性能问题
有些变动 Vue 是不能检测到的,也不会触发视图更新:• 通过索引直接设置项,比如 app.books[3] = { ... }.
解决第一个问题可以用两种方法实现同样的效果,第一种是使用 Vue 内置的 set 方法: Vue .set(app.books, 3, { name: ’ 《css 揭秘》 ’, author :’[希] Lea Verou ’ ., ) } 如果是在 webpack 中使用组件化的方式,这时 可以使用$set ,例如: this.$set(app.books, 3, { name: ’《css 揭秘》’, author :’[希] Lea Verou ’ )} 另一种方法: app.books . splice(3, 1 , { name : ’《css 揭秘》’, author : ’ [希J Lea Verou ’ }) • 修改数组长度,比如叩p.books.length = 1.
直接用 splice 来解决:app.books.splice(l);
过滤与排序
当你不想改变原数组,想通过一个数组的副本来做过滤或排序的显示时,可以使用计算属性 来返回过滤或排序后的数组,计算属性 依赖于列表 ,但是不会修改列表。实现排序也是类似的,
方法与事件
@click
的表达式可以直接使用 JavaScript 语句,也可以是一个在 Vue 实例中 methods 选项内 的函数名
在 methods 中定义了我们需要的方法供@click 调用, 需要注意的是,@click 调用的方法名后 可以不跟括号“()” 。 此时,如果该方法有参数,默认会将原生事件对象 event 传入 ,
这种在 HTML 元素上监昕事件的设计看似将 DOM 与 JavaScript 紧藕合,违背分离的原理,实 则刚好相反。因为通过 HTML 就可以知道调用的是哪个方法,将逻辑与 DOM 解藕,便于维护。 最重要的是, 当 ViewModel 销毁时,所有的事件处理器都会自动删除,无须自己清理。 Vue 提供了一个特殊变量$event,用于访问原生 DOM 事件
修饰符
在上例使用的 event.preventDefault()也可以用 Vue 事件的修饰符来实现,在@绑定的事件后加 小圆点“.”,再跟一个后缀来使用修饰符。 Vue 支持以下修饰符:
< !一阻止单击事件冒泡 一〉
< !一提交事件不再重载页面 一〉
< !一修饰符可以串联一〉
< !一只有修饰符一〉
< !一添加事件侦听器时使用事件捕获模式一〉 ...
< !一只当事件在该元素本身(而不是子元素) 触发时触发回调一〉 ...
< !一只触发一次,组件同样适用一〉 ...
在表单元素上监昕键盘事件时,还可以使用按键修饰符,比如按下具体某个键时才调用方法:
< !一只有在 keyCode 是 13 时调用 vm . submit ()一〉
除了具体的某个 keyCode 外, Vue 还提供了一些快捷名称 ,以下是全部的别名:
• .enter • .tab • .delete (捕获“删除”和“退格”键)• .esc • .space • .up • .down • .left • .right 这些按键修饰符也可以组合使用,或和鼠标一起配合使用:
• .ctrl • .alt • .shift • .meta (Mac 下是 Command 键, Windows 下是窗口键) 例如:
第6章表单与v-model
基本用法
Vue.js提供了 v-model 指令,用于在表单类元素上双向绑定数据,
使用 v-model 后,表羊控件显示的值只依赖所绑定的数据,不再关心初始化时的 value 属性 ,对于在<textarea> 之间插入的值,也不会生效. 使用 v-model 时,如果是用中文输入法输入中文,一般在没有选定饲组前,也就是在 拼音阶段, Vue 是不会更新数据的,当敲下汉字时才会触发更新。 如果希望总是实时更新,可以用@input 来替代 v-model. 事实上, v-model 也是一个特殊的语法糖,只 不过它会在不同的表单上智能处理。
单选按钮在单独使用时,不需要 v-model,直接使用 v-bind 绑定一个布尔类型的值, 为真时 选中, 为否时不选
如果是组合使用来实现互斥选择的效果,就需要 v-model 配合 value 来使用:
复选框:
复选框也分单独使用和组合使用,不过用法稍与单选不同。复选框单独使用时,也是用 v-model 来绑定一个布尔值
在选时,数据 checked 的值变为了 true, label 中渲染的内容也会更新。 组合使用时,也是 v-model 与 value 一起,多个勾选框都绑定到同一个数组类型的数据, value 的值在数组当中,就会选中这一项。这一过程也是双向的,在勾选时, value 的值也会自动 push 到 这个数组中,
绑定值:
v-model 绑定的值是一 个静态字符串或布尔值, 但在业务中,有时需要绑定一个动态的数据, 这时可以用 v-bind 来实现。
修饰符:
.lazy: 在输入框中, v-model 默认是在 input 事件中同步输入框的数据(除了提示中介绍的中文输入 法情况外),使用修饰符 .lazy 会转变为在 change 事件中同步,message 并不是实时改变的,而是在失焦或按回车时才更新。.number: 使用修饰符.number 可以将输入转换为 Number 类型,否则虽然你输入的是数字,但它的类型 其实是 String,比如在数字输入框时会比较有用
.trim: 修饰符 .trim 可以自动过滤输入的首尾空格,
第7章组件详解
组件(Component)是 Vue. 最核心的功能,也是整个框架设计最精彩的地方.
组件注册后才可以使用。注册有全局注册和局部注册两种方式 。全局注册后, 任何 Vue 实例都可以使用。全局注册示例代码如下: Vue.component (’my- component ’, { }) my-component 就是注册的组件自定义标签名称 ,推荐使用小写加减号分割的形式命名。 要在父实例中使用这个组件,必须要在实例创建前注册 ,之后就可以用<my-component> 的形式来使用组件 了,
template的 DOM 结构必须被一个元素包含, 如果直接写成 “这里是组件的内容”, 不带 “ div>”是无法渲染的
在组件选项中添加 template 就可以显示组件内容了, 示例代码如下: Vue . component (’my-component ’, { template: ’ <div>这里是组件的内容</div> ' }) ;
在 Vue 实例中,使用 components 选项可以局部注册组件,注册后的组件只有在该实例作用域 下有效。组件中也可以使用 components 选项来注册组件,使组件可以嵌套。
Vue 组件的模板在某些情况下会受到 HTML 的限制,比如<table>内规定只允许是〈tr〉、<td>、
可以使用特殊的 is 属性来挂载组件. tbody 在渲染时, 会被替换为组件的内容。常见的限制元素还有<ul>、<ol>、<select> 。
组件中声明了数据 count, 它在组件初始化时会获取来自父组件的 initCount, 之后就与之无关 了,只用维护 count, 这样就可以避免直接操作 initCount。 另一种情况就是 prop 作为需要被转变的原始值传入。这种情况用计算属性
在javaScript中对象和数组是引用类型,指向同一个内存空间,所以 props是对象和数组时,在子组件内改变是会影响父组件的 。 props 选项的值是对象时,当 prop 需要验证时,就需要对象写法。 一般当你的组件需要提供给别人使用时,推荐都进行数据验证,比如某个数据必须是数字类型,如果传入字符串,就会在控制台弹出警告。 以下是几个 prop 的示例:
Vue.component ( ’ my-component ’, {
props : {
//必须是数字类型
propA: Number,
//必须是字符串或数字类型
propB : [String, Number] ,
//布尔值,如果没有定义,默认值就是 true
propC: { type : Boolean, default : true}
//数字,而且是必传
propD: { type: Number, required: true }
//如果是数组或对象,默认值必须是一个函数来返回
propE: { type : Array, default : function () { return [] ; }
//自定义一个验证函数
propF: { validator: function (value) { return value > 10; ) }
验证的 type 类型可以是:• String • Number • Boolean • Object • Array • Function
rpe 也可以是一个自定义构造器,使用 instanceof 检测。 当 prop 验证失败时,在开发版本下会在控制台抛出一条警告。
组件通信:
组件关系可分为父子组件通信、兄弟组件通信、跨级组件通信.
自定义事件:
子组件用$emit()来触发事件,父组件用$on()来 监听子组件的事件。 父组件也可以直接在子组件的自定义标签上使用 v-on 来监听子组件触发的自定义事件,
除了用 v-on 在组件上监听自定义事件外,也可以监听DOM 事件,这时可以用.native 修饰符 表示监听的是一个原生事 件,监听的是该组件的根元素,
使用 v-model Vue2.x 可以在自定义组件上使用 v-model 指令,我们先来看一个示例:
Vue . component (
’my-component’,
{ template :’+l ’,
data : function () { return { counter: 0 }},
methods : { handleClick: function () { this.counter++; this . $emit (’input ’, this.counter);
.})}
}
var app =new Vue({ el :’#app’,
data: {
total : 0
})
仍然是点击按钮加 1 的效果, 不过这次组件$emit()的事件名是特殊的 input, 在使用组件的父 级,井没有在<my-component>上使用@input= “handler”,而是直接用了 v-model 绑定的一个数据 total。这也可以称作是一个语法糖,因为上面的示例可以间接地用自定义事件来实现:
非父子组件通信:
在 Vue. 2.x 中 , 推荐使用一个空的 Vue 实例作为中央事件总线(bus) ,也就是一个中介。
{{message ))
component- a>
首先创建了 一个名为 bus 的空 Vue 实例,里面没有任何内容;然后全局定义了组件 component-a;最后创建 Vue 实例 app,在 app 初始化时,也就是在生命周期 mounted 钩子函数里监 听了来自 bus 的事件 on-message,而在组件 component-a 中,点击按钮会通过 bus 把事件 on-message 发出去,此时 app 就会接收到来自 bus 的事件,进而在回调里完成自己的业务逻辑。
父链
在子组件中,使用 this.$parent 可以直接访问该组件的父实例或组件,父组件也可以通过 this.$children 访问它所有的子组件,而且可以递归向上或向下无线访问, 直到根实例或最内层的组 件。
( ( message } } component-a>
子组件索引
当子组件较多时, 通过 this.$children 来一一遍历出我们需要的一个组件实例是比较困难的, 尤其是组件动态渲染时,它们的序列是不固定的。 Vue 提供了子组件索引的方法,用特殊的属性 ref 来为子组件指定一个索引名称
在父组件模板中,子组件标签上使用 ref指定一个名称,井在父组件内通过 this.$refs 来访问指 定名称的子组件。
当需要让组件组合使用,混合父组件的内容与子组件的模板时,就会用到 slot,
这个过程叫作 内容分发(transclusion)。
以<app>为例,它有两个特点: • 编译的作用域。
父组件模板的内容是在父组件作用域内编译,子组件模板的内容是在子组件作用域内编译。
单个 Slot 在子组件内使用特殊的<slot>元素就可以为这个子组件开启一个 slot (插槽),在父组件模板 里,插入在子组件标签内的所有内容将替代子组件的<slot> 标签及它的内容
子组件<slot>内的备用内容,它的作用域是子组件本身.
具名 Slot 给<slot>元素指定一个 name 后可以分发多个内容,具名 Slot 可以与单个 Slot 共存
作用域插槽 作用域插槽是一种特殊的 slot,使用一个可以复用的模板替换己渲染元素。
第8章自定义指令 第9章Render函数
Vue.js 2.x 与 Vue扣 1.x 最大的区别就在于 2.x 使用了 Virtual Dom (虚拟 DOM)来更新 DOM 节点,提升擅染性能。
React 和 Vue 2 都使用了 Virtual Dom 技术, Virtual Dom 并不是真正意义上的 DOM,而是一 个轻量级的 JavaScript 对象,在状态发生变化时, Virtual Dom 会进行 Diff 运算,来更新只需要被 替换的 DOM,而不是全部重绘。 与 DOM 操作相比, Virtual Dom 是基于 JavaScript 计算的,所以开销会小很多
在 Vue.js 2 中, Virtual Dom 就是通过一种 VNode 类表达的,每个 DOM 元素或组件都对应一 个 VNode 对象
第10章使用webpack
web pack 的主要适用场景是单页面富应用(SPA) 。 SPA 通常是由一个 html 文件和一堆按需 加载的 js 组成,它的 html 结构可能会非常简单
export 和 import 是用来导出和导入模块的。 一个模块就是一个js 文件,它拥有独立的作用域,
II config.js
var Conf ig = { version :’1. 0. 0 ’
export { Config };
或:
II config.js
export var Conf ig = { version:’1. 0. 0 ’
其他类型( 比如函数、数组、常量等)也可以导出 ,比如导出一个函数:
II add.js
export function add(a, b) {
return a + b;
模块导出后,在需要使用模块的文件使用 import 再导入, 就可以在这个文件内使用这些模块 了
,导入的模块名称都是在 export 的文件中设置的,也就是说用户必须预先知道 这个名称叫什么,比如 Config、 add。而有的时候,用户不想去了解名称是什么,只是把模块的功能 拿来使用,或者想自定义名称,这时可以使用 export default 来输出默认的模块.
单页面富应用(SPA) ,
而 SPA 的核心就是前 端路由。那什么是路由呢?通俗地讲,就是网址,比如 https://www.iviewui.com/docs/ guide/introduce; 再专业一点, 就是每次 GET.或者 POST 等请求在服务端有一个专门的正则配置列表,然后匹配到具 体的一条路径后,分发到不同的 Controller, 进行各种操作,最终将 htrr 或数据返回给前端,这就完 成了一次 IO。 当然,目前绝大多数的网站都是这种后端路由,也就是多页面的 ,这样的好处有很多,比如 页面可以在服务端渲染好直接返回给浏览器,不用等待前端加载任何js 和 css 就可以直接显示网页 内容,再比如对 SEO 的友好等。后端路由的缺点也是很明显的,就是模板是由后端来维护或改写 的。 前端开发者需要安装整套的后端服务,必要时还得学习像 Php或 Java 这些非前端语言来改写 html 结构,所以 html 和数据、逻辑混为一谈,维护起来既脆肿又麻烦。 然后就有了
前后端分离的开发模式 ,后端只提供 API 来返回数据,前端通过 Ajax 获取数据后, 再用一定的方式渲染到页面里,这么做的优点就是前后端做的事情分得很清楚,后端专注在数据上, 前端专注在交互和可视化上,如果今后再开发移动 App,那就正好能使用一套 API 了 。 当然,缺 点也很明显,就是首屏渲染需要时间来加载 css 和 js.
在 Node.js 出现后,这种现象有了改善,就是所谓的大前端,得益于 Node.js 和 JavaScript 的语 言特性, html 模板可以完全由前端来控制,同步或异步渲染完全由前端自由决定,并且由前端维 护一套模板,这就是为什么在服务端使用 artTemplate、 React 以及 Vue2 的原因。说了这么多,到 底怎样算是 SPA 呢?
其实就是在前后端分离的基础上,加一层前端路由。 前端路由,即由前端来维护一个路由规则。实现有两种,
一种是利用 url 的 hash, 就是常说的 锚点, JavaScrip/通过 hashChange 事件来监听 url 的改变, IE7 及以下需要用轮询:
另一种就是 HTML5 的 History 模式,它使 url 看起来像普通网站那样,以“/”分剖,没有#,但页面并没有 跳转,不过使用这种模式需要服务端支持,服务端在接收到所有的请求后,在fl指向同一个 html 文 件,不然会出现 404。因此, SPA 只有一个 html时,整个网站所有的内容都在这一个 html 里,通过 JavaScript 来处理。 前端路由的优点有很多,比如页面持久性,像大部分音乐网站,你都可以在播放歌曲的同时 跳转到别的页面,而音乐没有中断。再比如前后端彻底分离。
在 ES 6 中,使用 let 和 const 命令来声明变量,代替了 var. let 和 const 的作用域是“块”, 比女口: let a = l ; var b = 2; console . log (b); I I 2 console . log(a); //报错: a is not defined con st 与 let 的主要区别是, const 用于声明常量,也就是声明后不能再修改. 如果一时还不了解它们的其他区别,可以先把 let 和 const 当作 var 来理解.
, webpack 会把每一个路由都打包为一个js 文件,在请求到该页面时,才去加载这个页面的 js, 也就是异步实现的懒加载(按需加载)
第11章插件
跳转
vue-router 有两种跳转页面的方法,
第一种是使用内置的<router-link>组件,它会被渲染为一个 标签 :
vue-router
默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。
它的用法与一般的组件一样, to 是一个 prop,指定需要跳转的路径, 当然也可以用 v-bind 动 态设置。使用<router-link>,在 HTML5 的 History 模式下会拦截点击,避免浏览器重新加载页面。
• tag tag 可以指定渲染成什么标签,比如<router-link to="/about” tag=”Ii”〉渲染的结果就是<Ii> 。
• replace 使用 replace 不会留下 History 记录,所以导航后不能用后退键返回上一个页面,。
• active-class 当<router-link>对应的路由匹配成功时,会自动给当前元素设置一个名为 router-link-active 的 class,设置 prop: active-class 可以修改默认的名称。在做类似导航栏时,可以使用该功 能高亮显示当前页面对应的导航菜单项,但是一般不会修改 active-class,直接使用默认值 router-link-active 就可以.
有时候,跳转页面可能需要在 JavaScript 里进行,类似于 window.location.href。这时可以用第 二种跳转方法,使用 router 实例的方法。
。 vue-router 提供了导航钩子 beforeEach 和 afterEach , 它们会在路由即将改变前和改变后触发,所以设置标题可以在 beforeEach 钩子完成。 导航钩子有 3 个参数: • to 即将要进入的目标的路由对象。 • form 当前导航即将要离开的路由对象。 • next 调用该方法后,才能进入下一个钩子。 路由列表的 meta z字段可以自定义一些信息,比如我们将每个页面的 title 写入了 meta 来统一 维护, beforeEach 钩子可以从路由对象 to 里获取 meta 信息,从而改变标题。 有了这两个钩子,还能做很多事情来提升用户体验。比如一个页面较长,滚动到某个位置, 再跳转到另一个页面,滚动条默认是在上一个页面停留的位置,而好的体验肯定是能返回顶端。通 过钩子 afterEach 就可以实现: 。
仓库 store 包含了应用的数据(状态)和操作过程。
Vuex 里的数据都是响应式的,任何组件使 用同- store 的数据时,只要 store 的数据变化,对应的组件也会立即更新。 数据保存在 Vuex 选项的 state 字段内,比如要实现一个计数器,定义一个数据 count,初始值 为 0:
const store= new Vuex.Store({
state: {
count: 0
., ) }
在任何组件内,可以直接通过$store.state.count 读取:
{{ $store.state.count ))
在组件内,来自 store 的数据只能读取,不能手动改变,改变 store 中数据的唯一途径就是显式 地提交 mutations 。 mutations 是 Vuex 的第二个选项,用来直接修改 store 里的数据。 我们给计数器增加 2 个 mutations,用来加 l 和减 1:
const store= new Vuex . Store({
state: {
count: 0
} ,
mutations: {
increment (state) {
state . count ++;
} ,
decrease (state) {
state.count --;
}}
在组件内,通过 this.$store.commit 方法来执行 mutations 。在 indexi 中添加两个按钮用于加 和减:
{ { count } } +l - 1
mutations 还可以接受第二个参数,可以是数字、字符串或对象等类型。比如每次增加的不是 1, 而是指定的数量,可以这样改写: mutation 里尽量不要异步操作数据。如果异步操作数据了,组件在 commit 后, 数据不能立即改变,而且不知道什么时候会改变。
高级用法 Vuex 还有其他 3 个选项可以使用: getters(实现数据定制)、 actions、 modules。
mutation 里不应该异步操作数据,所以有了 actions 选项。 action 与 mutation 很像, 不同的是 action 里面提交的是 mutation, 井且可以异步操作业务逻辑,action 在组件内通过$store.dispatch 触发.
mutations、 actions 看起来很相似,可能会觉得不知道该用哪个,但是 Vuex 很像是一种与开发 者的约定,所以涉及改变数据的,就使用 mutations,存在业务逻辑的,就用 actions
最后一个选项是 modules,它用来将 store 分割到不同模块。当你的项目足够大时, store 里的 state、 getters、 mutations、 actions 会非常多,都放在 rnain.js 里显得不是很友好,使用 modules 可以 把它们写到不同的文件中。每个 module 拥有自己的 state、 getters、 mutations、 actions,而且可以 多层嵌套。
第12章iView经典组件剖析 第13章实战:知乎日报项目开发 第14章实战:电商网站项目开发 第15章相关开源项目介绍
你可能感兴趣的:(《Vue.js实战》读书笔记)
element实现动态路由+面包屑
软件技术NINI
vue案例 vue.js 前端
el-breadcrumb是ElementUI组件库中的一个面包屑导航组件,它用于显示当前页面的路径,帮助用户快速理解和导航到应用的各个部分。在Vue.js项目中,如果你已经安装了ElementUI,就可以很方便地使用el-breadcrumb组件。以下是一个基本的使用示例:安装ElementUI(如果你还没有安装的话):你可以通过npm或yarn来安装ElementUI。bash复制代码npmi
10月|愿你的青春不负梦想-读书笔记-01
Tracy的小书斋
本书的作者是俞敏洪,大家都很熟悉他了吧。俞敏洪老师是我行业的领头羊吧,也是我事业上的偶像。本日摘录他书中第一章中的金句:『一个人如果什么目标都没有,就会浑浑噩噩,感觉生命中缺少能量。能给我们能量的,是对未来的期待。第一件事,我始终为了进步而努力。与其追寻全世界的骏马,不如种植丰美的草原,到时骏马自然会来。第二件事,我始终有阶段性的目标。什么东西能给我能量?答案是对未来的期待。』读到这里的时候,我便
《投行人生》读书笔记
小蘑菇的树洞
《投行人生》----作者詹姆斯-A-朗德摩根斯坦利副主席40年的职业洞见-很短小精悍的篇幅,比较适合初入职场的新人。第一部分成功的职业生涯需要规划1.情商归为适应能力分享与协作同理心适应能力,更多的是自我意识,你有能力识别自己的情并分辨这些情绪如何影响你的思想和行为。2.对于初入职场的人的建议,细节,截止日期和数据很重要截止日期,一种有效的方法是请老板为你所有的任务进行优先级排序。和老板喝咖啡的好
Python数据分析与可视化实战指南
William数据分析
python python 数据
在数据驱动的时代,Python因其简洁的语法、强大的库生态系统以及活跃的社区,成为了数据分析与可视化的首选语言。本文将通过一个详细的案例,带领大家学习如何使用Python进行数据分析,并通过可视化来直观呈现分析结果。一、环境准备1.1安装必要库在开始数据分析和可视化之前,我们需要安装一些常用的库。主要包括pandas、numpy、matplotlib和seaborn等。这些库分别用于数据处理、数学
Python教程:一文了解使用Python处理XPath
旦莫
Python进阶 python 开发语言
目录1.环境准备1.1安装lxml1.2验证安装2.XPath基础2.1什么是XPath?2.2XPath语法2.3示例XML文档3.使用lxml解析XML3.1解析XML文档3.2查看解析结果4.XPath查询4.1基本路径查询4.2使用属性查询4.3查询多个节点5.XPath的高级用法5.1使用逻辑运算符5.2使用函数6.实战案例6.1从网页抓取数据6.1.1安装Requests库6.1.2代
拥有断舍离的心态,过精简生活--《断舍离》读书笔记
爱吃丸子的小樱桃
不知不觉间房间里的东西越来越多,虽然摆放整齐,但也时常会觉得空间逼仄,令人心生烦闷。抱着断舍离的态度,我开始阅读《断舍离》这本书,希望从书中能找到一些有效的方法,帮助我实现空间、物品上的断舍离。《断舍离》是日本作家山下英子通过自己的经历、思考和实践总结而成的,整体内涵也从刚开始的私人生活哲学的“断舍离”升华成了“人生实践哲学”,接着又成为每个人都能实行的“改变人生的断舍离”,从“哲学”逐渐升华成“
《Python数据分析实战终极指南》
xjt921122
python 数据分析 开发语言
对于分析师来说,大家在学习Python数据分析的路上,多多少少都遇到过很多大坑**,有关于技能和思维的**:Excel已经没办法处理现有的数据量了,应该学Python吗?找了一大堆Python和Pandas的资料来学习,为什么自己动手就懵了?跟着比赛类公开数据分析案例练了很久,为什么当自己面对数据需求还是只会数据处理而没有分析思路?学了对比、细分、聚类分析,也会用PEST、波特五力这类分析法,为啥
Python实现简单的机器学习算法
master_chenchengg
python python 办公效率 python开发 IT
Python实现简单的机器学习算法开篇:初探机器学习的奇妙之旅搭建环境:一切从安装开始必备工具箱第一步:安装Anaconda和JupyterNotebook小贴士:如何配置Python环境变量算法初体验:从零开始的Python机器学习线性回归:让数据说话数据准备:从哪里找数据编码实战:Python实现线性回归模型评估:如何判断模型好坏逻辑回归:从分类开始理论入门:什么是逻辑回归代码实现:使用skl
读书笔记|《遇见孩子,遇见更好的自己》5
抹茶社长
为人父母意味着放弃自己的过去,不要对以往没有实现的心愿耿耿于怀,只有这样,孩子们才能做回自己。985909803.jpg孩子在与父母保持亲密的同时更需要独立,唯有这样,孩子才会成为孩子,父母才会成其为父母。有耐心的人生往往更幸福,给孩子留点余地。认识到养儿育女是对耐心的考验。为失败做好心理准备,教会孩子控制情绪。了解自己的底线,说到底线,有一点很重要,父母之所以发脾气,真正的原因往往在于他们自己,
springboot+vue项目实战一-创建SpringBoot简单项目
苹果酱0567
面试题汇总与解析 spring boot 后端 java 中间件 开发语言
这段时间抽空给女朋友搭建一个个人博客,想着记录一下建站的过程,就当做笔记吧。虽然复制zjblog只要一个小时就可以搞定一个网站,或者用cms系统,三四个小时就可以做出一个前后台都有的网站,而且想做成啥样也都行。但是就是要从新做,自己做的意义不一样,更何况,俺就是专门干这个的,嘿嘿嘿要做一个网站,而且从零开始,首先呢就是技术选型了,经过一番思量决定选择-SpringBoot做后端,前端使用Vue做一
阅读《认知觉醒》读书笔记
就看看书
本周阅读了周岭的《认知觉醒开启自我改变的原动力》,启发较多,故做读书笔记一则,留待学习。全书共八章,讲述了大脑、潜意识、元认知、专注力、学习力、行动力、情绪力及成本最低的成长之道。具体描述了大脑、焦虑、耐心、模糊、感性、元认知、自控力、专注力、情绪专注、学习专注、匹配、深度、关联、体系、打卡、反馈、休息、清晰、傻瓜、行动、心智宽带、单一视角、游戏心态、早起、冥想、阅读、写作、运动等相关知识点。大脑
WebMagic:强大的Java爬虫框架解析与实战
Aaron_945
Java java 爬虫 开发语言
文章目录引言官网链接WebMagic原理概述基础使用1.添加依赖2.编写PageProcessor高级使用1.自定义Pipeline2.分布式抓取优点结论引言在大数据时代,网络爬虫作为数据收集的重要工具,扮演着不可或缺的角色。Java作为一门广泛使用的编程语言,在爬虫开发领域也有其独特的优势。WebMagic是一个开源的Java爬虫框架,它提供了简单灵活的API,支持多线程、分布式抓取,以及丰富的
博客网站制作教程
2401_85194651
java maven
首先就是技术框架:后端:Java+SpringBoot数据库:MySQL前端:Vue.js数据库连接:JPA(JavaPersistenceAPI)1.项目结构blog-app/├──backend/│├──src/main/java/com/example/blogapp/││├──BlogApplication.java││├──config/│││└──DatabaseConfig.java
GenVisR 基因组数据可视化实战(三)
11的雾
3.genCov画每个突变位点附件的coverage,跟igv有点相似。这个操作起来很复杂,但是图还是挺有用的。可以考虑。由于我的referencegenomebuild是hg38BiocManager::install(c("TxDb.Hsapiens.UCSC.hg38.knownGene","BSgenome.Hsapiens.UCSC.hg38"))library(TxDb.Hsapien
python爬取微信小程序数据,python爬取小程序数据
2301_81900439
前端
大家好,小编来为大家解答以下问题,python爬取微信小程序数据,python爬取小程序数据,现在让我们一起来看看吧!Python爬虫系列之微信小程序实战基于Scrapy爬虫框架实现对微信小程序数据的爬取首先,你得需要安装抓包工具,这里推荐使用Charles,至于怎么使用后期有时间我会出一个事例最重要的步骤之一就是分析接口,理清楚每一个接口功能,然后连接起来形成接口串思路,再通过Spider的回调
HarmonyOS开发实战( Beta5.0)搜索框热搜词自动切换
让开,我要吃人了
OpenHarmony HarmonyOS 鸿蒙开发 harmonyos 华为 鸿蒙 移动开发 鸿蒙系统 前端 开发语言
鸿蒙HarmonyOS开发往期必看:HarmonyOSNEXT应用开发性能实践总结最新版!“非常详细的”鸿蒙HarmonyOSNext应用开发学习路线!(从零基础入门到精通)介绍本示例介绍使用TextInput组件与Swiper组件实现搜索框内热搜词自动切换。效果图预览使用说明页面顶部搜索框内热搜词条自动切换,编辑搜索框时自动隐藏。实现思路使用TextInput实现搜索框TextInput({te
【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(二十八)
向往风的男子
k8s 学习 kubernetes 容器
本站以分享各种运维经验和运维所需要的技能为主《python零基础入门》:python零基础入门学习《python运维脚本》:python运维脚本实践《shell》:shell学习《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战《k8》从问题中去学习k8s《docker学习》暂未更新《ceph学习》ceph日常问题解决分享《日志收集》ELK+各种中间件《运维日常》
阿里巴巴商品搜索API返回值实战解析
weixin_43841111
api java 前端 javascript
在解析阿里巴巴中国站商品搜索API返回值并进行实战时,可以从以下几个方面入手:一、了解API返回值的结构基本信息返回值通常包含商品的标题、价格、库存、图片链接等基本信息。这些信息对于了解商品的概况非常重要。例如,商品标题可以让你快速了解商品的名称和特点,价格信息可以帮助你进行价格比较和成本核算。详细描述可能包括商品的详细描述、规格参数、使用方法等。这些信息对于深入了解商品的特性和功能非常有帮助。比
《对生命说是》读书笔记2021-5-27
Diana_58d9
静心技巧——换个视角看待问题。尝试一下这个实验,1坐在椅子上,允许自己全身心的沉浸在你最爱的问题当中,你知道头脑热爱咀嚼他们,记录当你被卷入问题时的感受。2站起来有意识地离开那张椅子,想象你现在离开了你的问题。缓缓的围绕椅子走一圈,从不同的角度看看你的问题。在房间中找一个远离问题的空间,开始仔细深入的看看这个问题,他是真实的还是你制造出来的,同样的状况对于其他人来说会是问题吗?3反复体会作战问题里
李笑来 6 你到底有没有资本+7什么是落后
盛大米
6你到底有没有资本摘要不能够心平气和地被判上无期徒刑的资本,就别假装资本混迹江湖了。投资知识,经验,智慧,几乎只能从实战中获得————书上写的,牛人讲的,都跟你没关系,因为只有那些东西在你骨子里生根之后再发芽且不夭折而后还要等上很久才会茁壮甚至茂盛。。。。直接将年收入的10%-20%判死刑是最简单,最直接,最粗暴最有效的操作方式。投资,尤其是“好的投资”,一定是“舍我其谁”的活动。关于资本的思考,
基于JavaWeb开发的Java+SpringMvc+vue+element实现上海汽车博物馆平台
网顺技术团队
成品程序项目 java vue.js 汽车 课程设计 spring boot
基于JavaWeb开发的Java+SpringMvc+vue+element实现上海汽车博物馆平台作者主页网顺技术团队欢迎点赞收藏⭐留言文末获取源码联系方式查看下方微信号获取联系方式承接各种定制系统精彩系列推荐精彩专栏推荐订阅不然下次找不到哟Java毕设项目精品实战案例《1000套》感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人文章目录基
【前端】vue 报错:The template root requires exactly one element
程序员-张师傅
前端 前端 vue.js javascript
【前端】vue报错:Thetemplaterootrequiresexactlyoneelement在Vue.js中,当你遇到错误“Thetemplaterootrequiresexactlyoneelement”时,这通常意味着你的Vue组件的模板(template)根节点不是单一的元素。Vue要求每个组件的模板必须有一个根元素来包裹所有的子元素。这个错误通常出现在以下几种情况:模板中有多个并行
精力是碎片化时代的核心竞争力——精力管理介绍
爱写作的harry
《掌控:开启不疲惫、不焦虑的人生》读书笔记精力是碎片化时代的核心竞争力精力包括身、心两个层面,包括体力、专注力和意志力等多个维度。在信息爆炸、全球化竞争的时代,谁的体力充沛,专注力和意志力更强,谁获胜的机会就更大。而要做到这些,不做精力管理,一切都是空谈。另外,人的精力是有限的,表现会有高低起伏,所以需要管理,需要规划使用。怎样才算做到了精力管理精力管理是指主动掌握自己的体力、专注力和意志力,让自
跟剽悍一只猫学习收获之成为领域专家
财务自由的社群运营人苏宝
001找到这个领域内权威的书籍。002按照书的脉络(章节目录)记录书中的重要内容(对自己认知系统造成冲击的,以前没有学过的,觉得有用的,暂时还不太理解的)记录下来。003读完第一遍以后,接着读第二遍。这一遍记录书里对你有用的方法论,并尝试依据这些方法论实战。004再读一遍,这一遍记录尝试梳理整个书的认知框架和内在逻辑。005之后,可以多朗读几遍全书。你会发现,你对这些知识的理解会越来越全面,越有深
《经营者养成记》读书笔记分享
37度杉杉
何为经营者:变革的能力、赚钱的能力、建设团队的能力和追求理想的能力。读书笔记:(一)经营的含义1、所谓经营者,就是取得成果的人2、所谓经营者,是抱持使命感,将使命与成果相结合的人3、经营者必须是领导者,具备“建设团队的能力”4、经营者必须为使命而生的人,具备“追求理想的能力”(二)为什么必须培养经营者?一、变革的能力1、抱持高远的目标2、质疑常识,不受常识束缚3、树立高标准、不放松不放弃4、不畏风
财富自由之路读书笔记2
Elaine_a963
继续财富自由读书笔记,今天就第十-二十三章进行归纳总结思考。这本书可以说是边学边练的武功秘籍。秘籍一:注意力。先从认知上刷新,先前谈到价值的重要性及单位价值提升的必要性。这里就引出了:“注意力”是在任何地方“挖掘”价值的最基本工具。那么,要自如运用注意力,就得练习。这里李老师给的无他,就是基本功训练扎实-坐享。秘籍二:活在未来。再一次颠覆认知,大众的思维是活在当下,而这里指引我们要活在未来。用正确
Python OpenCV图像处理:从基础到高级的全方位指南
极客代码
玩转Python 开发语言 python opencv 图像处理 计算机视觉
目录第一部分:PythonOpenCV图像处理基础1.1OpenCV简介1.2PythonOpenCV安装1.3实战案例:图像显示与保存1.4注意事项第二部分:PythonOpenCV图像处理高级技巧2.1图像变换2.2图像增强2.3图像复原第三部分:PythonOpenCV图像处理实战项目3.1图像滤波3.2图像分割3.3图像特征提取第四部分:PythonOpenCV图像处理注意事项与优化策略4
【机器人建模和控制】读书笔记
Piccab0o
机器人
机器人建模和控制——马克·斯庞A.x10=x1∙x0x^0_1=x_1\bulletx_0x10=x1∙x0,其实就是:1)x1x_1x1轴向量在O0O_0O0系下的坐标2)在x0x_0x0轴上的投影3)坐标变换矩阵的R10R_1^0R10的第一个元素B.点p在o1x1y1z1o_1x_1y_1z_1o1x1y1z1系下的坐标p1p^1p1可以表示为:p=ux1+vy1+wz1p=ux_1+vy_
分享一个基于python的电子书数据采集与可视化分析 hadoop电子书数据分析与推荐系统 spark大数据毕设项目(源码、调试、LW、开题、PPT)
计算机源码社
Python项目 大数据 大数据 python hadoop 计算机毕业设计选题 计算机毕业设计源码 数据分析 spark毕设
作者:计算机源码社个人简介:本人八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流!学习资料、程序开发、技术解答、文档报告如需要源码,可以扫取文章下方二维码联系咨询Java项目微信小程序项目Android项目Python项目PHP项目ASP.NET项目Node.js项目选题推荐项目实战|p
增长黑客和最小可复制的内核
爱思考的糖
五段-增长黑客的三大步骤生活就像逆水行舟,加入你不能加速,现实中最好的情况,你也就处在一种原地打转的状况。增长,就像一辆车里的加速器。围棋爱好者,水平一直没有进步的原因。是因为没有找到提高下棋水平的增长模式有三个办法可以提高:做死活题,练习做关键决策的能力;打谱,复盘经典案例;找AI陪练。增长黑客的三个实战步骤:第一步,假设:建立最小闭环。从笨办法开始,不怕犯错,代价并不高,你可以勇敢尝试。想知道
枚举的构造函数中抛出异常会怎样
bylijinnan
java enum 单例
首先从使用enum实现单例说起。
为什么要用enum来实现单例?
这篇文章(
http://javarevisited.blogspot.sg/2012/07/why-enum-singleton-are-better-in-java.html)阐述了三个理由:
1.enum单例简单、容易,只需几行代码:
public enum Singleton {
INSTANCE;
CMake 教程
aigo
C++
转自:http://xiang.lf.blog.163.com/blog/static/127733322201481114456136/
CMake是一个跨平台的程序构建工具,比如起自己编写Makefile方便很多。
介绍:http://baike.baidu.com/view/1126160.htm
本文件不介绍CMake的基本语法,下面是篇不错的入门教程:
http:
cvc-complex-type.2.3: Element 'beans' cannot have character
Cb123456
spring Webgis
cvc-complex-type.2.3: Element 'beans' cannot have character
Line 33 in XML document from ServletContext resource [/WEB-INF/backend-servlet.xml] is i
jquery实例:随页面滚动条滚动而自动加载内容
120153216
jquery
<script language="javascript">
$(function (){
var i = 4;$(window).bind("scroll", function (event){
//滚动条到网页头部的 高度,兼容ie,ff,chrome
var top = document.documentElement.s
将数据库中的数据转换成dbs文件
何必如此
sql dbs
旗正规则引擎通过数据库配置器(DataBuilder)来管理数据库,无论是Oracle,还是其他主流的数据都支持,操作方式是一样的。旗正规则引擎的数据库配置器是用于编辑数据库结构信息以及管理数据库表数据,并且可以执行SQL 语句,主要功能如下。
1)数据库生成表结构信息:
主要生成数据库配置文件(.conf文
在IBATIS中配置SQL语句的IN方式
357029540
ibatis
在使用IBATIS进行SQL语句配置查询时,我们一定会遇到通过IN查询的地方,在使用IN查询时我们可以有两种方式进行配置参数:String和List。具体使用方式如下:
1.String:定义一个String的参数userIds,把这个参数传入IBATIS的sql配置文件,sql语句就可以这样写:
<select id="getForms" param
Spring3 MVC 笔记(一)
7454103
spring mvc bean REST JSF
自从 MVC 这个概念提出来之后 struts1.X struts2.X jsf 。。。。。
这个view 层的技术一个接一个! 都用过!不敢说哪个绝对的强悍!
要看业务,和整体的设计!
最近公司要求开发个新系统!
Timer与Spring Quartz 定时执行程序
darkranger
spring bean 工作 quartz
有时候需要定时触发某一项任务。其实在jdk1.3,java sdk就通过java.util.Timer提供相应的功能。一个简单的例子说明如何使用,很简单: 1、第一步,我们需要建立一项任务,我们的任务需要继承java.util.TimerTask package com.test; import java.text.SimpleDateFormat; import java.util.Date;
大端小端转换,le32_to_cpu 和cpu_to_le32
aijuans
C语言相关
大端小端转换,le32_to_cpu 和cpu_to_le32 字节序
http://oss.org.cn/kernel-book/ldd3/ch11s04.html
小心不要假设字节序. PC 存储多字节值是低字节为先(小端为先, 因此是小端), 一些高级的平台以另一种方式(大端)
Nginx负载均衡配置实例详解
avords
[导读] 负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦。负载均衡先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解 负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦。
负载均衡
先来简单了解一下什么是负载均衡
乱说的
houxinyou
框架 敏捷开发 软件测试
从很久以前,大家就研究框架,开发方法,软件工程,好多!反正我是搞不明白!
这两天看好多人研究敏捷模型,瀑布模型!也没太搞明白.
不过感觉和程序开发语言差不多,
瀑布就是顺序,敏捷就是循环.
瀑布就是需求、分析、设计、编码、测试一步一步走下来。而敏捷就是按摸块或者说迭代做个循环,第个循环中也一样是需求、分析、设计、编码、测试一步一步走下来。
也可以把软件开发理
欣赏的价值——一个小故事
bijian1013
有效辅导 欣赏 欣赏的价值
第一次参加家长会,幼儿园的老师说:"您的儿子有多动症,在板凳上连三分钟都坐不了,你最好带他去医院看一看。" 回家的路上,儿子问她老师都说了些什么,她鼻子一酸,差点流下泪来。因为全班30位小朋友,惟有他表现最差;惟有对他,老师表现出不屑,然而她还在告诉她的儿子:"老师表扬你了,说宝宝原来在板凳上坐不了一分钟,现在能坐三分钟。其他妈妈都非常羡慕妈妈,因为全班只有宝宝
包冲突问题的解决方法
bingyingao
eclipse maven exclusions 包冲突
包冲突是开发过程中很常见的问题:
其表现有:
1.明明在eclipse中能够索引到某个类,运行时却报出找不到类。
2.明明在eclipse中能够索引到某个类的方法,运行时却报出找不到方法。
3.类及方法都有,以正确编译成了.class文件,在本机跑的好好的,发到测试或者正式环境就
抛如下异常:
java.lang.NoClassDefFoundError: Could not in
【Spark七十五】Spark Streaming整合Flume-NG三之接入log4j
bit1129
Stream
先来一段废话:
实际工作中,业务系统的日志基本上是使用Log4j写入到日志文件中的,问题的关键之处在于业务日志的格式混乱,这给对日志文件中的日志进行统计分析带来了极大的困难,或者说,基本上无法进行分析,每个人写日志的习惯不同,导致日志行的格式五花八门,最后只能通过grep来查找特定的关键词缩小范围,但是在集群环境下,每个机器去grep一遍,分析一遍,这个效率如何可想之二,大好光阴都浪费在这上面了
sudoku solver in Haskell
bookjovi
sudoku haskell
这几天没太多的事做,想着用函数式语言来写点实用的程序,像fib和prime之类的就不想提了(就一行代码的事),写什么程序呢?在网上闲逛时发现sudoku游戏,sudoku十几年前就知道了,学生生涯时也想过用C/Java来实现个智能求解,但到最后往往没写成,主要是用C/Java写的话会很麻烦。
现在写程序,本人总是有一种思维惯性,总是想把程序写的更紧凑,更精致,代码行数最少,所以现
java apache ftpClient
bro_feng
java
最近使用apache的ftpclient插件实现ftp下载,遇见几个问题,做如下总结。
1. 上传阻塞,一连串的上传,其中一个就阻塞了,或是用storeFile上传时返回false。查了点资料,说是FTP有主动模式和被动模式。将传出模式修改为被动模式ftp.enterLocalPassiveMode();然后就好了。
看了网上相关介绍,对主动模式和被动模式区别还是比较的模糊,不太了解被动模
读《研磨设计模式》-代码笔记-工厂方法模式
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
package design.pattern;
/*
* 工厂方法模式:使一个类的实例化延迟到子类
* 某次,我在工作不知不觉中就用到了工厂方法模式(称为模板方法模式更恰当。2012-10-29):
* 有很多不同的产品,它
面试记录语
chenyu19891124
招聘
或许真的在一个平台上成长成什么样,都必须靠自己去努力。有了好的平台让自己展示,就该好好努力。今天是自己单独一次去面试别人,感觉有点小紧张,说话有点打结。在面试完后写面试情况表,下笔真的好难,尤其是要对面试人的情况说明真的好难。
今天面试的是自己同事的同事,现在的这个同事要离职了,介绍了我现在这位同事以前的同事来面试。今天这位求职者面试的是配置管理,期初看了简历觉得应该很适合做配置管理,但是今天面
Fire Workflow 1.0正式版终于发布了
comsci
工作 workflow Google
Fire Workflow 是国内另外一款开源工作流,作者是著名的非也同志,哈哈....
官方网站是 http://www.fireflow.org
经过大家努力,Fire Workflow 1.0正式版终于发布了
正式版主要变化:
1、增加IWorkItem.jumpToEx(...)方法,取消了当前环节和目标环节必须在同一条执行线的限制,使得自由流更加自由
2、增加IT
Python向脚本传参
daizj
python 脚本 传参
如果想对python脚本传参数,python中对应的argc, argv(c语言的命令行参数)是什么呢?
需要模块:sys
参数个数:len(sys.argv)
脚本名: sys.argv[0]
参数1: sys.argv[1]
参数2: sys.argv[
管理用户分组的命令gpasswd
dongwei_6688
passwd
NAME: gpasswd - administer the /etc/group file
SYNOPSIS:
gpasswd group
gpasswd -a user group
gpasswd -d user group
gpasswd -R group
gpasswd -r group
gpasswd [-A user,...] [-M user,...] g
郝斌老师数据结构课程笔记
dcj3sjt126com
数据结构与算法
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
yii2 cgridview加上选择框进行操作
dcj3sjt126com
GridView
页面代码
<?=Html::beginForm(['controller/bulk'],'post');?>
<?=Html::dropDownList('action','',[''=>'Mark selected as: ','c'=>'Confirmed','nc'=>'No Confirmed'],['class'=>'dropdown',])
linux mysql
fypop
linux
enquiry mysql version in centos linux
yum list installed | grep mysql
yum -y remove mysql-libs.x86_64
enquiry mysql version in yum repositoryyum list | grep mysql oryum -y list mysql*
install mysq
Scramble String
hcx2013
String
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrings recursively.
Below is one possible representation of s1 = "great":
跟我学Shiro目录贴
jinnianshilongnian
跟我学shiro
历经三个月左右时间,《跟我学Shiro》系列教程已经完结,暂时没有需要补充的内容,因此生成PDF版供大家下载。最近项目比较紧,没有时间解答一些疑问,暂时无法回复一些问题,很抱歉,不过可以加群(334194438/348194195)一起讨论问题。
----广告-----------------------------------------------------
nginx日志切割并使用flume-ng收集日志
liyonghui160com
nginx的日志文件没有rotate功能。如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件。第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件。第二步向nginx主
Oracle死锁解决方法
pda158
oracle
select p.spid,c.object_name,b.session_id,b.oracle_username,b.os_user_name from v$process p,v$session a, v$locked_object b,all_objects c where p.addr=a.paddr and a.process=b.process and c.object_id=b.
java之List排序
shiguanghui
list排序
在Java Collection Framework中定义的List实现有Vector,ArrayList和LinkedList。这些集合提供了对对象组的索引访问。他们提供了元素的添加与删除支持。然而,它们并没有内置的元素排序支持。 你能够使用java.util.Collections类中的sort()方法对List元素进行排序。你既可以给方法传递
servlet单例多线程
utopialxw
单例 多线程 servlet
转自http://www.cnblogs.com/yjhrem/articles/3160864.html
和 http://blog.chinaunix.net/uid-7374279-id-3687149.html
Servlet 单例多线程
Servlet如何处理多个请求访问?Servlet容器默认是采用单实例多线程的方式处理多个请求的:1.当web服务器启动的