外面了。
解决方案
< div id = " app" >
< table>
< tbody>
< tr is = " row" > tr>
< tr is = " row" > tr>
< tr is = " row" > tr>
< tr is = " row" > tr>
tbody>
table>
div>
< script type = " text/javascript" >
Vue. component ( 'row' , {
template: '这是表格 ' ,
} ) ;
var vm = new Vue ( {
el: '#app' ,
} ) ;
script>
1.1.2 非根组件(子组件)中data
必须是函数,返回一个对象。
子组件不像是根组件只会有一个,既然注册了子组件就是想要复用,为了保证每一个子组件数据的唯一性,避免多个子组件数据共享,通过函数将数据存在到独立的函数作用域中。
< div id = " app" >
< table>
< tbody>
< tr is = " row" > tr>
< tr is = " row" > tr>
< tr is = " row" > tr>
< tr is = " row" > tr>
tbody>
table>
div>
< script type = " text/javascript" >
Vue. component ( 'row' , {
template: "{{num}} " ,
data: function ( ) {
return {
num: 0 ,
} ;
} ,
methods: {
addNum: function ( ) {
this . num++ ;
} ,
}
} ) ;
var vm = new Vue ( {
el: '#app' ,
} ) ;
script>
1.1.3 使用引用ref="引用名"
获取dom元素和组件引用
虽然使用vue我们只需要关心数据,不用操作dom。但是复杂的动画就不要指望vue,还是要使用dom。
1.使用ref获取dom元素
通过在html标签上加ref="xxx"
属性,可通过this.$refs.xxx
取得该dom节点
< div id = " app" >
< div ref = " hello" @click = " getDom" > {{message}} div>
div>
< script type = " text/javascript" >
var vm = new Vue ( {
el: '#app' ,
data: {
message: ' hello poorpenguin' ,
} ,
methods: {
getDom: function ( ) {
console. log ( this . $refs. hello) ;
}
}
} ) ;
script>
2.使用ref获取组件引用
在组件 上添加了ref属性,可以取得的是该组件的引用(也可以理解为该组件对象),因此可以访问该组件上的属性
这只是举个例子,并不推荐这样写
< div id = " app" >
< row ref = " numOne" @numchange = " changeTotal" > row>
+
< row ref = " numTwo" @numchange = " changeTotal" > row>
= {{total}}
div>
< script type = " text/javascript" >
Vue. component ( 'row' , {
template: '{{number}} ' ,
data: function ( ) {
return {
number: 0 ,
} ;
} ,
methods: {
addNum: function ( ) {
this . number++ ;
this . $emit ( 'numchange' ) ;
}
}
} ) ;
var vm = new Vue ( {
el: '#app' ,
data: {
total: 0 ,
} ,
methods: {
changeTotal: function ( ) {
this . total = this . $refs. numOne. number + this . $refs. numTwo. number;
}
}
} ) ;
script>
两个组件对象。
1.1.4 子组件的单个根元素
当子组件的模板template
中有多个dom元素的时候,要使用一个元素将他们包裹起来。每个组件必须只有一个根元素,所有要将模板的内容包裹在一个父元素内。
模板中这样写是会报错的。
var counter = {
props: [ 'count' ] ,
template: '123123 poorpenguin {{count}}
' ,
} ;
这样式正确的写法
var counter = {
props: [ 'count' ] ,
template: '123123 poorpenguin {{count}}
' ,
} ;
1.2 父子组件间的数据传递
1.2.1 父组件传值给子组件
父组件通过 属性形式 传值给子组件(不一定要使用v-bind
将属性和根组件中的变量绑定)
不使用指令v-bind
,直接使用属性进行传值。但是这样" "
中的就不是js表达式,子组件接收到的就是字符串
< div id = " app" >
< counter count = " 3" > counter>
div>
< script type = " text/javascript" >
var counter = {
props: [ 'count' ] ,
template: '{{count}}
' ,
} ;
var vm = new Vue ( {
el: '#app' ,
components: {
'counter' : counter,
}
} ) ;
script>
使用指令v-bind
,就可以将属性和根组件中的变量进行绑定,这时" "
中就是js表达式,也可以直接传递数字。
< div id = " app" >
< counter :count = " num1" > counter> 这里使用v-bind命令
或者< counter :count = " 3" > counter> 这样传递的也是数字,而不是字符串
div>
< script type = " text/javascript" >
var counter = {
props: [ 'count' ] ,
template: '{{count}}
' ,
} ;
var vm = new Vue ( {
el: '#app' ,
data: {
num1: 3 ,
} ,
components: {
'counter' : counter,
}
} ) ;
script>
子组件通过props[]
接收传递过来的属性,但是不能直接操作接收的属性 。
子组件通过props[]
接收传递过来的属性,并将传递过来的属性赋值给在data
中定义新属性。 因为单项数据流,修改Object的值会导致别的引用了该对象的子组件内数据的变化,用在子组件内复制一份该对象,修改子组件内自己的data来代替。
< div id = " app" >
< counter :count = " num1" > counter>
div>
< script type = " text/javascript" >
var counter = {
props: [ 'count' ] ,
data: function ( ) {
return {
number: this . count,
} ;
} ,
template: '{{number}}
' ,
methods: {
addNum: function ( ) {
this . number++
} ,
}
} ;
var vm = new Vue ( {
el: '#app' ,
data: {
num1: 3 ,
} ,
components: {
'counter' : counter,
}
} ) ;
script>
错误示范:
子组件
var counter = {
props: [ 'count' ] ,
template: '{{count}}
' ,
methods: {
addNum: function ( ) {
this . count++
} ,
}
} ;
1.2.2 子组件传值给父组件
子组件事件触发的形式this.$emit("自定义事件名","传给父组件的数据"),
向父组件传值
var counter = {
props: [ 'count' ] ,
data: function ( ) {
return {
number: this . count,
} ;
} ,
template: '{{number}}
' ,
methods: {
addNum: function ( ) {
this . number++
this . $emit ( 'numchange' , this . number) ;
} ,
}
} ;
父组件通过@自定义事件名="父组件的方法“
监听子组件传值
< div id = " app" >
< counter :count = " num1" @numchange = " show" > counter> 监听子组件的事件
div>
< script type = " text/javascript" >
var counter = {
props: [ 'count' ] ,
data: function ( ) {
return {
number: this . count,
} ;
} ,
template: '{{number}}
' ,
methods: {
addNum: function ( ) {
this . number++
this . $emit ( 'numchange' , this . number, '阿西吧' ) ;
} ,
}
} ;
var vm = new Vue ( {
el: '#app' ,
data: {
num1: 3 ,
} ,
components: {
'counter' : counter,
} ,
methods: {
show: function ( value, str) { 接收子组件的传值
console. log ( value, str) ;
} ,
}
} ) ;
script>
1.3 组件参数校验与非 props 特性
1.3.1 组件参数校验
1.3.2 非props特性
props 特性 :父组件向子组件传递一个属性,子组件通过 props 声明了相应属性进行接收,在 DOM 中不会显示该属性。
< div id = " app" >
< my-component title = " 标题1" content = " hello poorpenguin" > my-component>
div>
< script type = " text/javascript" >
Vue. component ( 'my-component' , {
props: [ 'content' , 'title' ] ,
template: `` ,
} ) ;
var vm = new Vue ( {
el: '#app' ,
} ) ;
script>
非props特性 :父组件向子组件传递一个属性,子组件没有通过 props 声明相应属性进行接收: 1、子组件中是无法使用父组件传递过来的值 2、该属性会显示在子组件模板中的根元素上
< div id = " app" >
< my-component title = " 标题1" content = " hello poorpenguin" > my-component>
div>
< script type = " text/javascript" >
Vue. component ( 'my-component' , {
template: `` ,
} ) ;
var vm = new Vue ( {
el: '#app' ,
} ) ;
script>
1.4 自定义组件绑定原生事件
什么是原生事件
在dom元素上绑定的事件就是原生事件
在子组件(自定义组件)的模板template
中dom元素绑定的也是原生事件。
< div id = " app" >
< my-component title = " 标题1" content = " hello poorpenguin" > my-component>
< div @click = " clickDiv" > div>
div>
< script type = " text/javascript" >
Vue. component ( 'my-component' , {
template: `` ,
methods: {
clickDiv: function ( ) {
alert ( '这是子组件中原生事件' ) ;
}
}
} ) ;
var vm = new Vue ( {
el: '#app' ,
methods: {
clickDiv: function ( ) {
alert ( '这是原生事件' ) ;
}
}
} ) ;
script>
什么是自定义事件
< div id = " app" >
< my-component title = " 标题1" content = " hello poorpenguin" @click = " show" > my-component>
< div @click = " clickDiv" > div>
div>
....
如果需要在自定义的组件上直接实现@click事件需要使用@click.native监听原生点击事件。
< my-component @click.native = " handleClick" > my-component>
div>
< script type = " text/javascript" >
Vue. component ( 'my-component' , {
template: `` ,
} ) ;
var vm = new Vue ( {
el: '#app' ,
methods: {
handleClick: function ( ) {
alert ( '自定义事件' ) ;
}
}
} ) ;
script>
1.4.1 在路由
上绑定原生事件
在router-link上直接绑定点击事件是不起作用的,需要使用.native修饰符才能绑定原生事件
< router-link to = " /" tag = " div" class = " header-abs" v-show = " isShow" @click.native = " removeScrollListener" >
< i class = " iconfont" > i>
router-link>
1.5 非父子组件间的传值
一个网页可以拆分成多个组件,根组件下有多个子组件,每一个子组件下也有许多子组件。
父子组件 ,就是具备父子关系的组件(如下图1和2
就是父子组件)
非父子组件 ,就是两个组件传值,但是两个组件不具备父子关系。(如下图的1和3
、3和3
就是分父子组件)
解决非父子组件间的传值,有两个解决方案
使用Vuex
利用vue的总线机制。
1.5.1 利用bus
(总线机制/发布订阅模式/观察者模式)解决非父子组件间传值问题
前面强调过,每一个组件都是一个Vue实例,如果在Vue的原型prototype
上定义一个属性,那后续实例化出来的根组件还是子组件都会有这个属性。
利用bus解决的三步骤:
在Vue的prototype上定义bus属性 Vue.prototype.bus = new Vue();
在组件的mounted生命周期钩子 里使用this.bus.$on(‘事件名’, function(value){});来监听所定义的bus属性上对应的事件被触发,然后在回调函数里进行操作。
在组件的methods定义的方法里使用 this.bus.$emit(‘事件名’, value); 触发事件并传值。
兄弟组件间的值传递:
< div id = " app" >
< child content = " poor" > child>
< child content = " penguin" > child>
div>
< script type = " text/javascript" >
Vue. prototype. bus = new Vue ( ) ;
Vue. component ( 'child' , {
props: {
content: String,
} ,
template: '{{selfContent}}
' ,
data: function ( ) {
return {
selfContent: this . content,
} ;
} ,
mounted: function ( ) {
var this_ = this ;
this . bus. $on ( 'childchange' , function ( value) {
this_. selfContent = value;
} ) ;
} ,
methods: {
handleClick: function ( ) {
this . bus. $emit ( 'childchange' , this . selfContent) ;
} ,
}
} ) ;
var vm = new Vue ( {
el: '#app' ,
} ) ;
script>
1.6 Vue中使用插槽
1.6.1 插槽
的作用
插槽在Vue中很重要,如果想要父组件向子组件传递dom元素
,子组件在模板template
展现传递过来的dom元素
,就需要用来插槽。
父组件使用属性传递dom元素
有人会说可以使用属性传递dom元素啊
。
< div id = " app" >
< child content = " poorpenguin " > child>
div>
< script type = " text/javascript" >
var child = {
props: [ 'content' ] ,
template: `` ,
} ;
var vm = new Vue ( {
el: '#app' ,
components: {
'child' : child,
}
} ) ;
script>
可以发现HTML标签并没有被解析。 那使用v-html
命令
template: `` ,
虽然HTML标签被解析了,但是外面又包裹了一层,
别想了没用。>
使用插槽就可以很好的解决问题。
1.6.2 插槽
基本用法
在父组件中的自定义组件中直接插入dom元素
在子组件的template
中使用
占位,在渲染后占位的
会被替换成dom元素。
< div id = " app" >
< child>
< h1> poorpenguin h1> **插槽的内容
child>
div>
< script type = " text/javascript" >
var child = {
props: [ 'content' ] ,
template: `` ,
} ;
var vm = new Vue ( {
el: '#app' ,
components: {
'child' : child,
}
} ) ;
script>
成功插入
多个
重复渲染的问题
这样说并不准确,下面例子说明问题。
< div id = " app" >
< child>
< div> 这是头headler div>
< div> 这是脚footer div>
child>
div>
< script type = " text/javascript" >
var child = {
props: [ 'content' ] ,
template: `` ,
} ;
var vm = new Vue ( {
el: '#app' ,
components: {
'child' : child,
}
} ) ;
script>
使用具名插槽解决
重复渲染的问题
1.6.3 具名插槽
具名插槽就是给插槽取名
,给要要传递的内容指定插槽
。
< div id = " app" >
< child>
< div slot = " header" > 这是头headler div>
< div slot = " footer" > 这是脚footer div>
child>
div>
< script type = " text/javascript" >
var child = {
props: [ 'content' ] ,
template: `` ,
} ;
var vm = new Vue ( {
el: '#app' ,
components: {
'child' : child,
}
} ) ;
script>
1.6.4 插槽定义默认值
用法
插槽默认内容
例子:
< div id = " app" >
< child>
< div slot = " footer" > 这是脚footer div>
child>
div>
< script type = " text/javascript" >
var child = {
props: [ 'content' ] ,
template: `` ,
} ;
var vm = new Vue ( {
el: '#app' ,
components: {
'child' : child,
}
} ) ;
script>
1.6.5 作用域插槽
作用域插槽的使用场景:
子组件循环中要循环的模板是由父组件决定的时候。(也就是同一个组件在不同地方使用,需要展现不同的样子)
作用域插槽必须用包裹,同时 必须定义slot-scope=‘props’来接受子组件传来插槽的值
< div id = " app" >
< child>
< template slot = " content" slot-scope = " props" >
< h2> {{props.item}} h2>
template>
child>
div>
< script type = " text/javascript" >
var child = {
props: [ 'content' ] ,
data: function ( ) {
return {
list : [ '某一发' , '某宣告' , '某本伟' , '某天佑' , '某糯米' ] ,
} ;
} ,
template: `
以下是被和谐名单
` ,
} ;
var vm = new Vue ( {
el: '#app' ,
components: {
'child' : child,
}
} ) ;
script>
1.7 动态组件
动态组件
使用is属性指定加载哪一个组件使用。
和v-if
类似,没有被加载的组件是会被销毁 的。
每一次组件的切换都是创建 和销毁
< div id = " app" >
< component :is = " type" > component>
< button @click = " handleBtnClick" > change button>
div>
< script type = " text/javascript" >
Vue. component ( 'child-one' , {
template: 'child-one ' ,
} ) ;
Vue. component ( 'child-two' , {
template: 'child-two ' ,
} ) ;
var vm = new Vue ( {
el: '#app' ,
data: {
type: 'child-one' ,
} ,
methods: {
handleBtnClick: function ( ) {
this . type = this . type === 'child-one' ? 'child-two' : 'child-one' ;
}
}
} ) ;
script>
在子组件的根元素上使用v-once
指令,可以提升效率
Vue. component ( 'child-one' , {
template: 'child-one ' ,
} ) ;
Vue. component ( 'child-two' , {
template: 'child-two ' ,
} ) ;
这样每一次在切换的时候,之前的内容会被保存在内存中,而不会被销毁。
二、Vue中的动画特效
在以下的情况可以使用
动画特效
条件渲染 (使用 v-if)
条件展示 (使用 v-show)
动态组件
组件根节点
2.1 Vue动画或过渡原理
vue中的css动画是通过在某一时刻 自动的给元素标签上增加相应css样式 来实现的。
设置过渡或动画的步骤
将要实现动画效果的 DOM 节点用 transition 标签包裹起来,可添加 name 属性;若没有 name 属性,则默认的 class 前缀为 v。
< transition name = " fade" >
< h1 v-if = " show" > Hello poorpenguin h1>
transition>
定义过渡类名
元素进入是的执行过程 在元素显示的瞬间(第1帧 的时候),会向目标元素上添加两个classfade-enter
和fade-enter-active
;执行到 第2帧 的时候,会去掉fade-enter
,添加fade-enter-to
;到动画 结束前1帧 的时候,去掉fade-enter-active
和fade-enter-to
,元素保持原始状态。 1 fade-enter:定义元素进入过渡第1帧的状态,在第2帧被移除。 2 fadel-enter-active:定义元素整个过渡的过渡时间,延时和曲线函数,其实就是transition: all .5s ease;
这个样子,在动画结束前1帧被移除。 3 fade-enter-to:定义元素在动画结束前1帧的状态,在第2帧添加,在动画结束前1帧被移除。一般都不写 ,让动画默认过渡到元素的原始状态。
元素离开时的执行过程 1 fade-leave:定义元素离开时第1帧的状态,一般都不写 ,默认从元素初始状态过渡。 2 fade-leave-active:… 3 fade-leave-to:定义动画结束前1帧的状态,这个是必须要写的。
< style>
.fade-enter {
transform : translateX ( 50px) ;
opacity : 0;
}
.fade-enter-active,
.fade-leave-active {
transition : all 3s ease;
}
.fade-leave-to {
transform : translateX ( 50px) ;
opacity : 0;
}
style>
如果没有给
添加name
属性,则css样式名可以v-
的前缀,不过不建议这样做。
< style>
.v-enter {
transform : translateX ( 50px) ;
opacity : 0;
}
.v-enter-active,
.v-leave-active {
transition : all 3s ease;
}
.v-leave-to {
transform : translateX ( 50px) ;
opacity : 0;
}
style>
....
< transition>
< h1 v-if = " show" > Hello poorpenguin h1>
transition>
案例1:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< script type = " text/javascript" src = " ./vue.js" > script>
< style>
.fade-enter {
transform : translateX ( 50px) ;
opacity : 0;
}
.fade-enter-active,
.fade-leave-active {
transition : all 3s ease;
}
.fade-leave-to {
transform : translateX ( 50px) ;
opacity : 0;
}
style>
head>
< body>
< div id = " app" >
< transition name = " fade" >
< h1 v-if = " show" > Hello poorpenguin h1>
transition>
< button @click = " handleBtnClick" > {{btnText}} button>
div>
< script type = " text/javascript" >
var vm = new Vue ( {
el: '#app' ,
data: {
show: true ,
btnText: '显示' ,
} ,
methods: {
handleBtnClick: function ( ) {
this . show = ! this . show;
this . btnText = this . btnText === '显示' ? '隐藏' : '显示' ;
} ,
}
} ) ;
script>
body>
html)>
2.2 在vue中使用动画 关键帧@keyframes
对css3动画不是很了解的请看 CSS3 基础(7)—— CSS3动画(animation)
通过2.1的原理我们知道在过渡类名中v-enter-active
和v-enter-active
这两个class在元素执行过渡或动画的过程中一直存在。所以我们可以省略除了v-enter-active
和v-enter-active
外其他class,使用关键帧@keyframes
来控制元素动画的初始和结束状态 。
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< script type = " text/javascript" src = " ./vue.js" > script>
< style>
@keyframes fade{
0% {
opacity : 0;
transform : translateX ( 50px) ;
}
100% {
opacity : 1;
}
}
.fade-enter-active {
animation : fade 3s;
}
.fade-leave-active {
animation : fade 3s reverse;
}
style>
head>
< body>
< div id = " app" >
< transition name = " fade" >
< h1 v-if = " show" > Hello poorpenguin h1>
transition>
< button @click = " handleBtnClick" > {{btnText}} button>
div>
< script type = " text/javascript" >
var vm = new Vue ( {
el: '#app' ,
data: {
show: true ,
btnText: '显示' ,
} ,
methods: {
handleBtnClick: function ( ) {
this . show = ! this . show;
this . btnText = this . btnText === '显示' ? '隐藏' : '显示' ;
} ,
}
} ) ;
script>
body>
html>
2.3 利用自定义过渡类名使用第三方动画库animate.css
2.3.1 自定义过渡类名
通过在transition
标签中加上
='..'
来使用自定义的过渡类名。 例子:
< style>
@keyframes fade{
0% {
opacity : 0;
transform : translateX ( 50px) ;
}
100% {
opacity : 1;
}
}
.show {
animation : fade 3s;
}
.hide {
animation : fade 3s reverse;
}
style>
< div id = " app" >
//使用自定义的过渡类名
< transition
enter-active-class = " show"
leave-active-class = " hide"
>
< h1 v-if = " show" > Hello poorpenguin h1>
transition>
< button @click = " handleBtnClick" > {{btnText}} button>
div>
< script type = " text/javascript" >
var vm = new Vue ( {
el: '#app' ,
data: {
show: true ,
btnText: '显示' ,
} ,
methods: {
handleBtnClick: function ( ) {
this . show = ! this . show;
this . btnText = this . btnText === '显示' ? '隐藏' : '显示' ;
} ,
}
} ) ;
script>
2.3.2 使用第三方动画库animate.css
animate.css官网
使用步骤
使用 link 来引用animate.css
只需要在
就行
ps:注意这里使用的是动画,只需要使用enter-active-class
和leave-active-class
就行,如果是使用过渡那就需要其他的过渡类名了
< link rel = " stylesheet" type = " text/css" href = " ./animate.css" >
< div id = " app" >
< transition
enter-active-class = " animated bounceInDown"
leave-active-class = " animated bounceOutDown"
>
< h1 v-if = " show" > Hello poorpenguin h1>
transition>
< button @click = " handleBtnClick" > {{btnText}} button>
div>
< script type = " text/javascript" >
var vm = new Vue ( {
el: '#app' ,
data: {
show: true ,
btnText: '显示' ,
} ,
methods: {
handleBtnClick: function ( ) {
this . show = ! this . show;
this . btnText = this . btnText === '显示' ? '隐藏' : '显示' ;
} ,
}
} ) ;
script>
2.4 解决第一次刷新页面没有动画的问题
使用appear
和appear-active
解决。 使用2.3的例子
< transition
appear
appear-active-class = " animated bounceInDown"
enter-active-class = " animated bounceInDown"
leave-active-class = " animated bounceOutDown"
>
< h1 v-if = " show" > Hello poorpenguin h1>
transition>
这样第一次进入(刷新页面)就有动画效果了。
2.5 在vue中同时使用过渡和动画
想要同时使用过渡和动画,只需要过渡和动画的两种方法相结合就行。
< style>
.fade-enter,
.fade-leave-to {
opacity : 0;
}
.fade-enter-active,
.fade-leave-active {
transition : opacity 3s;
}
style>
< transition
name = " fade"
appear
appear-active-class = " animated swing fade-enter-active"
enter-active-class = " animated swing fade-enter-active"
leave-active-class = " animated shake fade-leave-active"
>
< h1 v-if = " show" > Hello poorpenguin h1>
transition>
2.5.1 使用type
使过渡和动画同时结束
.同时存在过渡动画和其他动画,但时长不一样时,可以设置type属性来决定以谁为准,如: type="transition"
则以过渡的时长为准,type="animation"
以动画时长为准
< transition
type = " transition"
name = " fade"
appear
appear-active-class = " animated swing fade-enter-active"
enter-active-class = " animated swing fade-enter-active"
leave-active-class = " animated shake fade-leave-active"
>
< h1 v-if = " show" > Hello poorpenguin h1>
transition>
2.5.2 自定义时长:duration
当要自定义时长时可以这样, :duration=“3000” 以毫秒计,这样的话不会以动画时长为准,而是自己定义的时长;更复杂点可以设置入场和出场动画时长,:duration="{enter:5000, leave:10000}"
2.6 Vue中的 Js 动画和使用第三方js动画库Velocity.js
2.6.1 Vue中的JS动画
js动画是通过绑定在
上的钩子函数完成的。
< transition
@before-appear 都是第一次打开页面(刷新)
@appear
@after-appear
@before-enter = " beforeEnter" 进入动画前执行
@enter = " enter" 进入动画时执行
@after-enter = " afterEnter" 进入动画完成后,在enter中调用done()告诉vue,js动画结束才会触发
@before-leave = " beforeLeave"
@leave = " leave"
@after-leave = " afterLeave"
>
transition>
在定义的方法中都会接收到一个参数
methods: {
beforeEnter: function ( el) {
el. style. color= 'red' ;
}
enter: function ( el, done) {
done ( ) ; 只有调用这个回调函数,Vue才知道动画执行结束
}
afterEnter: function ( el) {
}
}
例子1:
< div id = " app" >
< h1 v-if = " show" > Hello poorpenguin h1>
transition>
< button @click = " handleBtnClick" > {{btnText}} button>
div>
< script type = " text/javascript" >
var vm = new Vue ( {
el: '#app' ,
data: {
show: true ,
btnText: '显示' ,
} ,
methods: {
beforeEnter: function ( el) {
el. style. color= 'red' ;
} ,
enter: function ( el, done) {
setTimeout ( function ( ) {
el. style. color= 'blue' ;
} , 2000 ) ;
setTimeout ( function ( ) {
done ( ) ;
} , 4000 ) ;
} ,
afterEnter: function ( el) {
el. style. color= 'black' ;
} ,
handleBtnClick: function ( ) {
this . show = ! this . show;
this . btnText = this . btnText === '显示' ? '隐藏' : '显示' ;
} ,
}
} ) ;
script>
2.6.2 使用第三方js动画库Velocity.js
Velocity.js
自称比jQuery动画和CSS-transitions以及CSS3 animation性能更好的JavaScript动画库。 velocity官网 velocity中文文档 使用Velocity.js可以实现参数和Vue中变量双向绑定,可以实现许多复杂的动画
2.7 Vue中的多个元素或组件过渡
vue的dom元素复用机制 ,可能会导致动画无法执行。元素添加唯一的key
值来使vue对该元素不进行复用
先进入再隐藏和先隐藏再进入,可在元素上设置: mode=“in-out” 或mode=“out-in”
2.7.1 Vue中的多个元素过渡
例子1:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< script type = " text/javascript" src = " ./vue.js" > script>
< style type = " text/css" >
.fade-enter,
.fade-leave-to {
opacity : 0;
}
.fade-enter {
transform : translateX ( -50px) ;
}
.fade-leave-to {
transform : translateX ( 50px) ;
}
.fade-enter-active,
.fade-leave-active {
transition : all 3s ease;
}
style>
head>
< body>
< div id = " app" >
< transition name = " fade" >
< div v-if = " show" key = " hello" > Hello porpenguin div>
< div v-else key = " bye" > bye poorpenguin div>
transition>
< button @click = " changeDiv" > change button>
div>
< script type = " text/javascript" >
var vm = new Vue ( {
el: '#app' ,
data: {
show: true ,
} ,
methods: {
changeDiv: function ( ) {
this . show = ! this . show;
} ,
}
} ) ;
script>
body>
html>
例子2:
< transition name = " fade" mode = " out-in" >
< div v-if = " show" key = " hello" > Hello porpenguin div>
< div v-else key = " bye" > bye poorpenguin div>
transition>
2.7.2 Vue中多个组件过渡
< transition name = " fade" mode = " out-in" >
< child-one v-if = " show" > Hello porpenguin child-one>
< child-two v-else > bye poorpenguin child-two>
transition>
< style type = " text/css" >
.fade-enter,
.fade-leave-to {
opacity : 0;
}
.fade-enter {
transform : translateX ( -50px) ;
}
.fade-leave-to {
transform : translateX ( 50px) ;
}
.fade-enter-active,
.fade-leave-active {
transition : all 1s ease;
}
style>
< div id = " app" >
< transition name = " fade" mode = " out-in" >
< component :is = " type" > component>
transition>
< button @click = " changeDiv" > change button>
div>
< script type = " text/javascript" >
Vue. component ( 'child-one' , {
template: 'hello poorpenguin
' ,
} ) ;
Vue. component ( 'child-two' , {
template: 'bye poorpenguin
' ,
} ) ;
var vm = new Vue ( {
el: '#app' ,
data: {
type: 'child-one' ,
} ,
methods: {
changeDiv: function ( ) {
this . type = this . type === 'child-one' ? 'child-two' : 'child-one' ;
} ,
}
} ) ;
script>
2.8 Vue中的列表过渡
循环列表建议给每一项都添加key这个特征
,不建议key的值为index
,建议值为每个数据的id。
的原理
< transition-group>
< div v-for"item of list" :key = " item.id" >
{{item.content}}
div>
transition-group>
相当于
< transition>
< div> ..... div>
transition>
< transition>
< div> ..... div>
transition>
< transition>
< div> ..... div>
transition>
每添加一项,都会单独执行一次过渡
例子:
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< script type = " text/javascript" src = " ./vue.js" > script>
< style type = " text/css" >
.fade-enter,
.fade-leave-to {
opacity : 0;
}
.fade-enter {
transform : translateX ( -50px) ;
}
.fade-leave-to {
transform : translateX ( 50px) ;
}
.fade-enter-active,
.fade-leave-active {
transition : all 1s ease;
}
style>
head>
< body>
< div id = " app" >
< transition-group name = " fade" >
< div v-for = " (item,index) of list" :key = " item.id" @click = " deleteItem(index)" >
{{item.content}}
div>
transition-group>
< button @click = " addItem" > 添加 button>
div>
< script type = " text/javascript" >
var count = 0 ;
var vm = new Vue ( {
el: '#app' ,
data: {
list: [ ] ,
} ,
methods: {
addItem: function ( ) {
this . list. push ( {
id: ++ count,
content: 'hello poorpenguin' ,
} ) ;
} ,
deleteItem: function ( index) {
this . list. splice ( index, 1 ) ;
} ,
}
} ) ;
script>
body>
html>
2.9 使用component
和slot
封装动画
写一个组件,里面的模版是
包裹的里面带一个插槽 用这个组件包裹需要动画的节点就可以了 比较推荐动画用js而不是css写,这样可以把动画全部封装在一个组件中。
在 slot 标签上使用 v-show,程序功能是无法实现的,必须要改成v-if。
slot 实际上是一个抽象元素,有点类似 template,本质上并不是一个元素。 而 v-show 是通过控制元素的 display 来进行显示隐藏的,slot 本质上并不是元素,所以压根也就不会有display 这个css属性。 所以,slot 的显示隐藏,得使用 v-if。
带css样式的普通动画封装
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< script type = " text/javascript" src = " ./vue.js" > script>
< style type = " text/css" >
.fade-enter,
.fade-leave-to {
opacity : 0;
}
.fade-enter {
transform : translateX ( -50px) ;
}
.fade-leave-to {
transform : translateX ( 50px) ;
}
.fade-enter-active,
.fade-leave-active {
transition : all 1s ease;
}
style>
head>
< body>
< div id = " app" >
< fade :state = " show" >
< h1> poorpenguin h1>
fade>
< button @click = " changeState" > change button>
div>
< script type = " text/javascript" >
Vue. component ( 'fade' , {
props: [ 'state' ] ,
template: `
` ,
} ) ;
var vm = new Vue ( {
el: '#app' ,
data: {
show: true ,
} ,
methods: {
changeState: function ( ) {
this . show = ! this . show;
} ,
}
} ) ;
script>
body>
html>
推荐使用Vue中的js动画,这样我们可以把动画的js代码都封装进组件中,省略css样式
略
你可能感兴趣的:(前端,Vue)
element实现动态路由+面包屑
软件技术NINI
vue案例 vue.js 前端
el-breadcrumb是ElementUI组件库中的一个面包屑导航组件,它用于显示当前页面的路径,帮助用户快速理解和导航到应用的各个部分。在Vue.js项目中,如果你已经安装了ElementUI,就可以很方便地使用el-breadcrumb组件。以下是一个基本的使用示例:安装ElementUI(如果你还没有安装的话):你可以通过npm或yarn来安装ElementUI。bash复制代码npmi
Long类型前后端数据不一致
igotyback
前端
响应给前端的数据浏览器控制台中response中看到的Long类型的数据是正常的到前端数据不一致前后端数据类型不匹配是一个常见问题,尤其是当后端使用Java的Long类型(64位)与前端JavaScript的Number类型(最大安全整数为2^53-1,即16位)进行数据交互时,很容易出现精度丢失的问题。这是因为JavaScript中的Number类型无法安全地表示超过16位的整数。为了解决这个问
DIV+CSS+JavaScript技术制作网页(旅游主题网页设计与制作)云南大理
STU学生网页设计
网页设计 期末网页作业 html静态网页 html5期末大作业 网页设计 web大作业
️精彩专栏推荐作者主页:【进入主页—获取更多源码】web前端期末大作业:【HTML5网页期末作业(1000套)】程序员有趣的告白方式:【HTML七夕情人节表白网页制作(110套)】文章目录二、网站介绍三、网站效果▶️1.视频演示2.图片演示四、网站代码HTML结构代码CSS样式代码五、更多源码二、网站介绍网站布局方面:计划采用目前主流的、能兼容各大主流浏览器、显示效果稳定的浮动网页布局结构。网站程
【加密社】Solidity 中的事件机制及其应用
加密社
闲侃 区块链 智能合约 区块链
加密社引言在Solidity合约开发过程中,事件(Events)是一种非常重要的机制。它们不仅能够让开发者记录智能合约的重要状态变更,还能够让外部系统(如前端应用)监听这些状态的变化。本文将详细介绍Solidity中的事件机制以及如何利用不同的手段来触发、监听和获取这些事件。事件存储的地方当我们在Solidity合约中使用emit关键字触发事件时,该事件会被记录在区块链的交易收据中。具体而言,事件
关于城市旅游的HTML网页设计——(旅游风景云南 5页)HTML+CSS+JavaScript
二挡起步
web前端期末大作业 javascript html css 旅游 风景
⛵源码获取文末联系✈Web前端开发技术描述网页设计题材,DIV+CSS布局制作,HTML+CSS网页设计期末课程大作业|游景点介绍|旅游风景区|家乡介绍|等网站的设计与制作|HTML期末大学生网页设计作业,Web大学生网页HTML:结构CSS:样式在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识JavaScrip
HTML网页设计制作大作业(div+css) 云南我的家乡旅游景点 带文字滚动
二挡起步
web前端期末大作业 web设计网页规划与设计 html css javascript dreamweaver 前端
Web前端开发技术描述网页设计题材,DIV+CSS布局制作,HTML+CSS网页设计期末课程大作业游景点介绍|旅游风景区|家乡介绍|等网站的设计与制作HTML期末大学生网页设计作业HTML:结构CSS:样式在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识JavaScript:做与用户的交互行为文章目录前端学习路线
node.js学习
小猿L
node.js node.js 学习 vim
node.js学习实操及笔记温故node.js,node.js学习实操过程及笔记~node.js学习视频node.js官网node.js中文网实操笔记githubcsdn笔记为什么学node.js可以让别人访问我们编写的网页为后续的框架学习打下基础,三大框架vuereactangular离不开node.jsnode.js是什么官网:node.js是一个开源的、跨平台的运行JavaScript的运行
vue3中el-table中点击图片放大时,被表格覆盖
叫我小鹏呀
vue.js javascript 前端
问题:vue3中el-table中点击图片放大时,被表格覆盖。解决方法:el-image添加preview-teleported
vue项目element-ui的table表格单元格合并
酋长哈哈
vue.js elementui javascript 前端
一、合并效果二全部代码exportdefault{name:'CellMerge',data(){return{tableData:[{id:'1',name:'王小虎',amount1:'165',amount2:'3.2',amount3:10},{id:'1',name:'王小虎',amount1:'162',amount2:'4.43',amount3:12},{id:'1',name:'
Vue中table合并单元格用法
weixin_30613343
javascript ViewUI
地名结果人名性别{{item.name}}已完成未完成{{item.groups[0].name}}{{item.groups[0].sex}}{{item.groups[son].name}}{{item.groups[son].sex}}exportdefault{data(){return{list:[{name:'地名1',result:'1',groups:[{name:'张三',sex
springboot+vue项目实战一-创建SpringBoot简单项目
苹果酱0567
面试题汇总与解析 spring boot 后端 java 中间件 开发语言
这段时间抽空给女朋友搭建一个个人博客,想着记录一下建站的过程,就当做笔记吧。虽然复制zjblog只要一个小时就可以搞定一个网站,或者用cms系统,三四个小时就可以做出一个前后台都有的网站,而且想做成啥样也都行。但是就是要从新做,自己做的意义不一样,更何况,俺就是专门干这个的,嘿嘿嘿要做一个网站,而且从零开始,首先呢就是技术选型了,经过一番思量决定选择-SpringBoot做后端,前端使用Vue做一
Vue( ElementUI入门、vue-cli安装)
m0_l5z
elementui vue.js
一.ElementUI入门目录:1.ElementUI入门1.1ElementUI简介1.2Vue+ElementUI安装1.3开发示例2.搭建nodejs环境2.1nodejs介绍2.2npm是什么2.3nodejs环境搭建2.3.1下载2.3.2解压2.3.3配置环境变量2.3.4配置npm全局模块路径和cache默认安装位置2.3.5修改npm镜像提高下载速度2.3.6验证安装结果3.运行n
博客网站制作教程
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
vue+el-table 可输入表格使用上下键进行input框切换
以对_
vue学习记录 vue.js javascript 前端
使用上下键进行完工数量这一列的切换-->//键盘触发事件show(ev,index){letnewIndex;letinputAll=document.querySelectorAll('.table_inputinput');//向上=38if(ev.keyCode==38){if(index==0){//如果是第一行,回到最后一个newIndex=inputAll.length-1}elsei
vue + Element UI table动态合并单元格
我家媳妇儿萌哒哒
element UI vue.js 前端 javascript
一、功能需求1、根据名称相同的合并工作阶段和主要任务合并这两列,但主要任务内容一样,但要考虑主要任务一样,但工作阶段不一样的情况。(枞向合并)2、落实情况里的定量内容和定性内容值一样则合并。(横向合并)二、功能实现exportdefault{data(){return{tableData:[{name:'a',address:'1',age:'1',six:'2'},{name:'a',addre
vue 创建项目报错:command failed: npm install --loglevel error
那鱼、会飞
vue.js vue-cli3
这个问题其实很好解决,只是很多种情况,逐一排除即可。稳下心来~vuecli3创建项目我的node版本是node14.15.0,(永远不要尝试最新版本)node各种版本下载地址:以往的版本|Node.js(nodejs.org)vue/
[email protected] @vue/
[email protected] (注意vue/cli2和vue/cli3的下载命名有所改变,2是-形式,3是/形式)其实报错
计算机毕业设计PHP仓储综合管理系统(源码+程序+VUE+lw+部署)
java毕设程序源码王哥
php 课程设计 vue.js
该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流项目运行环境配置:phpStudy+Vscode+Mysql5.7+HBuilderX+Navicat11+Vue+Express。项目技术:原生PHP++Vue等等组成,B/S模式+Vscode管理+前后端分离等等。环境需要1.运行环境:最好是小皮phpstudy最新版,我们在这个版本上开发的。其他版本理论上也可以。2.开发
最简单将静态网页挂载到服务器上(不用nginx)
全能全知者
服务器 nginx 运维 前端 html 笔记
最简单将静态网页挂载到服务器上(不用nginx)如果随便弄个静态网页挂在服务器都要用nignx就太麻烦了,所以直接使用Apache来搭建一些简单前端静态网页会相对方便很多检查Web服务器服务状态:sudosystemctlstatushttpd#ApacheWeb服务器如果发现没有安装web服务器:安装Apache:sudoyuminstallhttpd启动Apache:sudosystemctl
补充元象二面
Redstone Monstrosity
前端 面试
1.请尽可能详细地说明,防抖和节流的区别,应用场景?你的回答中不要写出示例代码。防抖(Debounce)和节流(Throttle)是两种常用的前端性能优化技术,它们的主要区别在于如何处理高频事件的触发。以下是防抖和节流的区别和应用场景的详细说明:防抖和节流的定义防抖:在一段时间内,多次执行变为只执行最后一次。防抖的原理是,当事件被触发后,设置一个延迟定时器。如果在这个延迟时间内事件再次被触发,则重
微信小程序开发注意事项
jun778895
微信小程序 小程序
微信小程序开发是一个融合了前端开发、用户体验设计、后端服务(可选)以及微信小程序平台特性的综合性项目。这里,我将详细介绍一个典型的小程序开发项目的全过程,包括项目规划、设计、开发、测试及部署上线等各个环节,并尽量使内容达到或超过2000字的要求。一、项目规划1.1项目背景与目标假设我们要开发一个名为“智慧校园助手”的微信小程序,旨在为学生提供一站式校园生活服务,包括课程表查询、图书馆座位预约、食堂
字节二面
Redstone Monstrosity
前端 面试
1.假设你是正在面试前端开发工程师的候选人,面试官让你详细说出你上一段实习过程的收获和感悟。在上一段实习过程中,我获得了宝贵的实践经验和深刻的行业洞察,以下是我的主要收获和感悟:一、专业技能提升框架应用熟练度:通过实际项目,我深入掌握了React、Vue等前端框架的使用,不仅提升了编码效率,还学会了如何根据项目需求选择合适的框架。问题解决能力:在实习期间,我遇到了许多预料之外的技术难题。通过查阅文
vue render 函数详解 (配参数详解)
你的眼睛會笑
vue2 vue.js javascript 前端
vuerender函数详解(配参数详解)在Vue3中,`render`函数被用来代替Vue2中的模板语法。它接收一个h函数(或者是`createElement`函数的别名),并且返回一个虚拟DOM。render函数的语法结构如下:render(h){returnh('div',{class:'container'},'Hello,World!')}在上面的示例中,我们使用h函数创建了一个div元素
前端代码上传文件
余生逆风飞翔
前端 javascript 开发语言
点击上传文件import{ElNotification}from'element-plus'import{API_CONFIG}from'../config/index.js'import{UploadFilled}from'@element-plus/icons-vue'import{reactive}from'vue'import{BASE_URL}from'../config/index'i
VUE3 + xterm + nestjs实现web远程终端 或 连接开启SSH登录的路由器和交换机。
焚木灵
node.js vue
可远程连接系统终端或开启SSH登录的路由器和交换机。相关资料:xtermjs/xterm.js:Aterminalfortheweb(github.com)后端实现(NestJS):1、安装依赖:npminstallnode-ssh@nestjs/websockets@nestjs/platform-socket.io2、我们将创建一个名为RemoteControlModule的NestJS模块,
详解“c:/work/src/components/a/b.vue“‘ has no default export报错原因
hw_happy
开发语言 前端 vue.js javascript
前情提要在一个vue文件中需要引入定义的b.vue文件,但是提示b文件没有默认导出,对于vue2文件来说有exportdefault,在中,所有定义的变量、函数和组件都会自动被视为默认导出的组件内容。因此,不需要显式地使用exportdefault来导出组件。但是在我引用这个文件的时候还是提示了这个错误,原来是我的项目使用了ts和vite\webpack,因为TypeScript和Vue的默认导出
uniapp实现动态标记效果详细步骤【前端开发】
2401_85123349
uni-app
第二个点在于实现将已经被用户标记的内容在下一次获取后刷新它的状态为已标记。这是什么意思呢?比如说上面gif图中的这些人物对象,有一些已被该用户添加为关心,那么当用户下一次进入该页面时,这些已经被添加关心的对象需要以“红心”状态显现出来。这个点的难度还不算大,只需要在每一次获取后端的内容后对标记对象进行状态更新即可。II.动态标记效果实现思路和步骤首先,整体的思路是利用动态类名对不同的元素进行选择。
Vue 项目运行时,报错 Error: Cannot find module ‘node:path‘
周bro
vue.js 前端 javascript node.js npm
node-v是否显示nodenpm-v报错Error:Cannotfindmodule‘node:path'是因为node版本和npm版本不匹配安装相对应的版本node版本10.16.0对应npm版本
[email protected] 执行该命令即可匹配版本官网https://nodejs.org/en/about/previous-releases
vue2实现复制,粘贴功能
周bro
vue.js javascript 前端
一、需求说明在项目中点击按钮复制某行文本是很常见的应用场景,在Vue项目中实现复制功能需要借助vue-clipboard2插件。二、代码实现1、安装vue-clipboard2依赖(出现错误的话,可以试试切换成淘宝镜像源npmconfigsetregistryhttps://registry.npm.taobao.org)npminstall--savevue-clipboard22、在main.
360前端星计划-动画可以这么玩
马小蜗
动画的基本原理定时器改变对象的属性根据新的属性重新渲染动画functionupdate(context){//更新属性}constticker=newTicker();ticker.tick(update,context);动画的种类1、JavaScript动画操作DOMCanvas2、CSS动画transitionanimation3、SVG动画SMILJS动画的优缺点优点:灵活度、可控性、性能
【vite 自动配置路由】
CODER-V
前端 javascript vue.js 前端 软件构建
手动配置路由,是一个没有技术含量又浪费时间的工作。本文将介绍vite构建的vue3项目如何编写一个自动配置路由的脚本。约定大于配置要想使用脚本完成路由的自动配置,我们就需要遵循以下目录规则:每一个页面对应一个包,当前包下的主页面命名为index.vue;每个包里必须配置一个page.js;在每一个page.js里边配置,额外的路由信息,比如:exportdefault{title:'商品',men
枚举的构造函数中抛出异常会怎样
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服务器启动的