外面了。
解决方案
< 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)
vue3计算属性computed
计算属性computedimport{computed}from"vue"//方式一//constcollapse=computed(()=>{//console.log('计算属性变化');//returnisCollapse//})//方式二constcollapse=computed({get:()=>{//返回订阅值returnisCollapse},set:(val)=>{//这里可以对
solidjs中实现vue中的keep-alive功能的总结
chrome-devtools
在Solid.js中,虽然没有像Vue中keep-alive这样的直接API,但你可以使用类似的方式来保持组件的状态或避免组件的重复挂载。Solid.js中的组件本质上是基于反应式系统的,每个组件都在被销毁时自动清除其反应式状态。所以,如果你想模拟keep-alive的效果,可以使用以下几种方式:1.使用createEffect或createMemo保存状态你可以通过使用createEffect或
solidjs中实现vue中的keep-alive功能的方法
angular
在Solid.js中,虽然没有像Vue中keep-alive这样的直接API,但你可以使用类似的方式来保持组件的状态或避免组件的重复挂载。Solid.js中的组件本质上是基于反应式系统的,每个组件都在被销毁时自动清除其反应式状态。所以,如果你想模拟keep-alive的效果,可以使用以下几种方式:1.使用createEffect或createMemo保存状态你可以通过使用createEffect或
使用Odoo Shell卸载模块
odoo中国
odoo odoo 开源软件 erp
使用OdooShell卸载模块我们在Odoo使用过程中,因为模块安装错误或者前端错误等导致odoo无法通过界面登录,这时候你可以使用OdooShell来卸载模块。OdooShell是一个交互式Pythonshell,允许你直接与Odoo数据库和模型进行交互。以下是使用OdooShell卸载模块的详细步骤:步骤1:启动OdooShell要启动OdooShell,你需要在终端中运行以下命令。确保你已经
[附源码]计算机毕业设计基于SpringBoot的小说阅读系统
计算机毕设程序设计
spring boot java 后端
项目运行环境配置:Jdk1.8+Tomcat7.0+Mysql+HBuilderX(Webstorm也行)+Eclispe(IntelliJIDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:SSM+mybatis+Maven+Vue等等组成,B/S模式+Maven管理等等。环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.ID
基于 Spring Boot 的社区居民健康管理系统部署说明书
小星袁
毕业设计原文 spring boot 后端 java
目录1系统概述2准备资料3系统安装与部署3.1数据库部署3.1.1MySQL的部署3.1.2Navicat的部署3.2服务器部署3.3客户端部署4系统配置与优化5其他基于SpringBoot的社区居民健康管理系统部署说明书1系统概述本系统主要运用了SpringBoot框架,前端页面的设计主要依托Vue框架来构建,实现丰富且交互性强的用户界面,后台管理功能则采用SpringBoot框架与MySQL数
前端性能优化——如何提高页面加载速度?
忘川...
前端 性能优化 html
1.将样式表放在头部首先说明一下,将样式表放在头部对于实际页面加载的时间并不能造成太大影响,但是这会减少页面首屏出现的时间,使页面内容逐步呈现,改善用户体验,防止“白屏”。我们总是希望页面能够尽快显示内容,为用户提供可视化的回馈,这对网速慢的用户来说是很重要的。将样式表放在文档底部会阻止浏览器中的内容逐步出现。为了避免当样式变化时重绘页面元素,浏览器会阻塞内容逐步呈现,造成“白屏”。这源自浏览器的
前端开发入门指南:HTML、CSS和JavaScript基础知识
方向感超强的
javascript css html 前端
引言:大家好,我是一名简单的前端开发爱好者,对于网页设计和用户体验的追求让我深深着迷。在本篇文章中,我将带领大家探索前端开发的基础知识,涵盖HTML、CSS和JavaScript。如果你对这个领域感兴趣,或者想要了解如何开始学习前端开发,那么这篇文章将为你提供一个良好的起点。1.前端开发概述在我们深入了解前端开发的细节之前,让我们先了解一下前端开发的定义和作用。简而言之,前端开发涉及构建用户直接与
小程序类毕业设计选题题目推荐 (29)
初尘屿风
毕业设计 后端 小程序 课程设计 spring boot 微信 后端 学习
基于微信小程序的设备故障报修管理系统设计与实现,SpringBoot+Vue+毕业论文基于微信小程序的设备故障报修管理系统设计与实现,SSM+Vue+毕业论文基于微信小程序的电影院购票小程序系统,SpringBoot+Vue+毕业论文+指导搭建视频基于微信小程序的宿舍报修管理系统设计与实现,SpringBoot(15500字)+Vue+毕业论文+指导搭建视频基于微信小程序的电影院订票选座系统的设计
前端504错误分析
ox0080
# 北漂+滴滴出行 Web VIP 激励 前端
前端出现504错误(网关超时)通常是由于代理服务器未能及时从上游服务获取响应。以下是详细分析步骤和解决方案:1.确认错误来源504含义:代理服务器(如Nginx、Apache)在等待后端服务响应时超时。常见架构:前端→代理服务器→后端服务,问题通常出在代理与后端之间。2.排查步骤(1)检查后端服务状态确认服务是否运行:通过日志或监控工具(如systemctlstatus,KubernetesPod
scoped作用原理及样式穿透的应用
太阳与星辰
Vue2 前端 面试 前端 vue 面试
scoped作用原理及样式穿透的应用(1)scoped作用原理(2)对第三条的详细解释(3)场景----微调第三方库样式(4)样式穿透(5)补充(1)scoped作用原理scoped是Vue样式作用域的一个特性,相信很多人经常在项目中用它来避免样式污染(即样式隔离)。当我们在一个组件中给style标签加上scoped时候,它会遵循以下三个规则,如下为组件实例生成一个唯一标识(可以称为文件指纹),给
部署前端项目2
augenstern416
前端
前端项目的部署是将开发完成的前端代码发布到服务器或云平台,使其能够通过互联网访问。以下是前端项目部署的常见步骤和工具:1.准备工作在部署之前,确保项目已经完成以下步骤:代码优化:压缩JavaScript、CSS和图片文件,减少文件体积。环境配置:区分开发环境和生产环境(如API地址、环境变量等)。测试:确保项目在本地测试通过,没有明显Bug。2.部署流程1.构建项目大多数前端项目(如React、V
对象的操作
augenstern416
javascript 开发语言 ecmascript
在前端开发中,JavaScript提供了许多内置对象和方法,用于处理数据、操作DOM、处理事件等。以下是一些常用对象及其方法和扩展技巧:1.Object对象Object是JavaScript中最基础的对象,几乎所有对象都继承自Object。常用方法Object.keys(obj):返回对象的所有可枚举属性的键名数组。constobj={a:1,b:2};console.log(Object.key
前端基础入门:HTML、CSS 和 JavaScript
阿绵
前端 前端 html css js
在现代网页开发中,前端技术扮演着至关重要的角色。无论是个人网站、企业官网,还是复杂的Web应用程序,前端开发的基础技术HTML、CSS和JavaScript都是每个开发者必须掌握的核心技能。本文将详细介绍这三者的基本概念及其应用一、HTML——网页的骨架HTML(HyperTextMarkupLanguage)是构建网页的基础语言。它是网页的结构和内容的标记语言,决定了网页上的文本、图像、表单等元
vue3+vite 自动引入export default的包
大橙子-
vue.js 前端
importautoImportfrom'unplugin-auto-import/vite';exportdefaultdefineConfig({plugins:[vue(),vueJsx(),autoImport({imports:['vue','vue-router','pinia',{//相当于importuseRouterStackStorefrom'@/store/modules/r
前端超长列表,虚拟滚动实现
大橙子-
前端 css javascript
虚拟滚动.container{width:300px;height:500px;overflow:hidden;border:1pxsolid#ccc;margin-top:50px;}.scroll-box{width:100%;height:100%;overflow-y:auto;overflow-x:hidden;position:relative;}.scroll-height-main
vue制作导航栏html,Vue实现导航栏菜单
DataQueen
vue制作导航栏html
本文实例为大家分享了Vue实现导航栏菜单的具体代码,供大家参考,具体内容如下这里是刚学习vue的时候,没有用vue的任何UI组件库写的导航栏菜单。menu.html导航栏左项目名称您好,用户!v-bind:class="{checked:index==nowIndex}"v-on:click="setTab('menu',index,menus)">{{menu.text}}菜单一的内容菜单二的内
vue3 项目如何接入 AI 大模型
代码搬运媛
人工智能
以下是在Vue3项目中接入AI大模型的一般步骤:准备工作确定要接入的AI模型,如OpenAI的gpt-3.5-turbo、科大讯飞的星火大模型等。选择AI模型及获取API密钥:注册对应AI平台的账号,进入账户设置页面找到“ViewAPIKeys”或类似选项,创建属于自己的API密钥,并妥善保存。创建Vue项目并安装依赖打开命令行,使用vuecreate项目名命令创建一个新的Vue项目,按照提示完成
vue-router 中滚动行为设置的妙用
代码搬运媛
vue.js javascript 前端
在vue-router里,滚动行为设置能够对路由切换时的页面滚动位置进行控制,这在单页面应用(SPA)里十分有用,能够为用户带来更流畅、更符合预期的浏览体验。下面为你详细介绍滚动行为设置的作用和使用方法。作用恢复滚动位置当用户在某个页面滚动到特定位置后,再导航到其他页面,之后又返回到该页面时,滚动行为设置可以让页面恢复到之前的滚动位置。这在浏览长页面或者列表页时非常实用,用户无需重新滚动到之前查看
前端框架虚拟DOM的产生
大橙子-
前端框架 前端 javascript
直接说结论:为了找出与命令式(原生实现步骤)所执行代码的最小差异化,从而优化代码性能。命令式:可以理解为面向过程编程,需要写好每个实现步骤constdiv=document.querySelector('#app')//获取divdiv.innerText='helloworld'//设置文本内容如果需要修改文字内容为“你好”div.innerText='你好'//设置文本内容声明式:可以理解为面
DeepSeek 助力 Vue 开发:打造丝滑的导航栏(Navbar)
宝码香车
# DeepSeek vue.js 前端 javascript ecmascript DeepSeek
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦目录DeepSeek助力Vue开发:打造丝滑的导航栏(Navbar)前言页面效果指令输入属性定义1.导航栏样式相关2.导航项相关3.响应式相关4.对齐方式相关事件定义1.导航项点击事件2.菜单折叠切换事件其他建议1.可访问性2.动画效果3.图标支
27岁大龄转码秋招惨败,朋友劝我转Java来得及吗?还是继续走前端或机器学习?
程序员yt
java 机器学习 开发语言
今天给大家分享的是一位粉丝的提问,27岁大龄转码秋招惨败,朋友劝我转Java来得及吗?还是继续走前端或机器学习?接下来把粉丝的具体提问和我的回复分享给大家,希望也能给一些类似情况的小伙伴一些启发和帮助。同学提问:211建筑本科,22年毕业后gap一年转码去了英国读的QS100的it的水硕(24年12月份毕业),转码后对就业形势认知不足,时间全花在课业上,八股文和算法准备的不充足,秋招算是惨败。读研
vue3 + vite引入地址路径报错,以及无法点击跳转相应的文件
zmyalh
前端 javascript vue.js
vue3+vite引入地址路径报错,以及无法点击跳转相应的文件在项目中找到tsconfig.json,或者jsconfig.json文件,使用一下代码替换即可。如果两个文件都不存在,如果项目使用了ts,就创建tsconfig.json文件,复制下方代码。如果不是使用的ts,就创建jsconfig.json文件,复制下方代码。配置完成后关掉软件重启!!!{"compilerOptions":{"ba
vue播放m3u8视频
zmyalh
html视频video 前端
这里封装成组件先安装插件npmivue-video-player-S//版本"^5.0.2"npmivideojs-flash-S//播放rtmpnpmivideojs-contrib-hls-S//播放m3u8父页面://传入视频地址videoUrl页面引入importvideosfrom"../../../components/videos/videos.vue";components:{vi
vue中nextTick函数和react类似实现
向画
vue.js react.js 前端
Vue3基本用法:import{nextTick}from'vue';//全局调用nextTick(()=>{//在下一个DOM更新循环后执行的代码});//在组件内部调用setup(){asyncfunctionhandleUpdate(){//修改数据...awaitnextTick();//在数据引发的DOM更新完成后执行的代码}}nextTick函数现在作为vue包的一个导出成员,需要显式
芯麦GC1808立体声ADC芯片解析:高性价比与全集成音频采集方案
青牛科技-Allen
GLOBALCHIP 音视频 单片机 嵌入式硬件 收录机 人工智能 家用电器
引言在直播设备、智能语音终端等新兴应用的推动下,高性能音频采集系统的需求持续增长。芯麦半导体推出的GC1808立体声音频模数转换器,凭借其全集成信号链设计和灵活的接口配置,为开发者提供了高性价比的音频前端解决方案。本文将从核心架构、关键技术特性及典型应用场景三个方面,深入解析这款芯片的设计亮点。一、GC1808核心特性概览全集成信号链内置64倍过采样率Δ-Σ调制器集成数字梳状滤波器(CombFil
前端面试题(HTML篇)
每天一点点~
html css javascript
1.网络中使用最多的图片格式有哪些?JPEG,GIF,PNG最流行的是JPEG格式,可以把文件压缩到最小在PS以JPEG格式存储时,提供11级压缩等级2.Doctype作用?严格模式与混杂模式如何区分?它们有何意义?声明文档类型声明位于位于HTML文档中的第一行,处于标签之前DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。标准模式(严格模式)浏览器按照W3C的标准解析执行代码标准模式(严
python websocket 心跳_websocket心跳及重连机制
蜗牛老湿
python websocket 心跳
websocket心跳及重连机制websocket是前后端交互的长连接,前后端也都可能因为一些情况导致连接失效并且相互之间没有反馈提醒。因此为了保证连接的可持续性和稳定性,websocket心跳重连就应运而生。在使用原生websocket的时候,如果设备网络断开,不会立刻触发websocket的任何事件,前端也就无法得知当前连接是否已经断开。这个时候如果调用websocket.send方法,浏览器
vue面试题|[2025-1-10]
○陈
vue面试题 vue.js javascript 前端
1.vue和jquery的区别是什么?1.原理不同vue就是数据绑定;jq是先获取dom再处理2.着重点不同vue是数据驱动,jq是着重于页面3.操作不同4.未来发展不同2.vuex的响应式处理vuex是vue的状态管理工具vue中可以直接触发methods中的方法,vuex是不可以的。处理异步,当触发事件的时候,会通过dispatch来访问actions中的方法,actions中的commit会
electron学习笔记
weixin_46452138
electron 学习 javascript
electron个人学习笔记一、electron简单了解Electron是一个跨平台的、基于Web前端技术的桌面GUI应用程序开发框架。可以使用HTML、CSS来绘制界面和控制布局,使用JavaScript来控制用户行为和业务逻辑,使用Node.js来通信、处理音频视频等,几乎所有的Web前端技术和框架(jQuery、Vue、React、Angular等)都可以应用到桌面GUI开发中。二、开发前基
枚举的构造函数中抛出异常会怎样
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服务器启动的