Vuejs的一些总结

1.Vuejs组件

vuejs构建组件使用


1

Vue.component(‘componentName‘,{ /*component*/ });

这里注意一点,组件要先注册再使用,也就是说:


1

2

3

4

5

6

7

8

9

10

11

12

13

14


Vue.component(‘mine‘,{

template:‘#mineTpl‘,

props:[‘name‘,‘title‘,‘city‘,‘content‘]

});

var v=new Vue({

el:‘#vueInstance‘,

data:{

name:‘zhang‘,

title:‘this is title‘,

city:‘Beijing‘,

content:‘these are some desc about Blog‘

}

});

如果反过来会报错,因为反过来代表先使用了组件的,但是组件却没注册。

webpack报错后,使用webpack --display-error-details可以排错

2.指令keep-alive

在看demo的时候看到在vue-router写着keep-alivekeep-alive的含义:
如果把切换出去的组件保留在内存中,可以保留它的状态或避免重新渲染。为此可以添加一个keep-alive指令


1

<component :is=‘curremtView‘ keep-alive></component>

3.如何让css只在当前组件中起作用

在每一个vue组件中都可以定义各自的css,js,如果希望组件内写的css只对当前组件起作用,只需要在style中写入scoped,即:


1

<style scoped></style>

4.vuejs循环插入图片

在写循环的时候,写入如下代码:


1

2

3


<div class="bio-slide" v-for="item in items">

<img src="{{item.image}}">

</div>

此时在控制台会出现警告
[Vue Warn]: src="": interpolation in "src" attribute will cause a 404 request. Use v-bind:src instead.这里意思是在“src”属性插值将导致404请求。使用v-bind:src代替。
所以替换成如下:


1

2

3


<div class="bio-slide" v-for="item in items">

<img v-bind:src="item.image">

</div>

这里需要主要,v-bind在写的时候不能再用双花括号,根据官方的说法:


1

<a v-bind:href="url"></a>

这里href是参数,它告诉 v-bind指令将元素的 href特性跟表达式 url 的值绑定。可能你已注意到可以用特性插值href="" 获得同样的结果:这样没错,并且实际上在内部特性插值会转为v-bind 绑定。

5.绑定value到Vue实例的一个动态属性上

对于单选按钮,勾选框及选择框选项,v-model绑定的value通常是静态字符串(对于勾选框是逻辑值):


1

2


<!-- `toggle` 为 true 或 false -->

<input type="checkbox" v-model="toggle">

但是有时候想绑定value到vue实例的一个动态属性上,这时可以用v-bind实现,并且这个属性的值可以不是字符串。例如绑定Checkbox的value到vue实例的一个动态属性:


1

2

3

4

5

6


<input

type="checkbox"

v-model="toggle"

v-bind:true-value="a"

v-bind:false-value="b">

<p>{{toggle}}</p>

这里绑定后,并不是说就可以点击后由true,false的切换变为a,b的切换,因为这里定义的动态a,b是scope上的a,b,并不能直接显示出来,此时


1

2

3

4


//当选中时

vm.toggle === vm.a

//当没选中时

vm.toggle === vm.b

所以此时需要在data中定义a,b,即:


1

2

3

4

5

6

7


new Vue({

el:‘...‘,

data:{

a:‘a‘,

b:‘b‘

}

});

6.片段实例

下面几种情况会让实例变成一个片断实例:

  1. 模板包含多个顶级元素。
  2. 模板只包含普通文本。
  3. 模板只包含其它组件(其它组件可能是一个片段实例)。
  4. 模板只包含一个元素指令,如<partial> 或vue-router 的 <router-view>
  5. 模板根节点有一个流程控制指令,如v-ifv-for

这些情况让实例有未知数量的顶级元素,它将把它的 DOM 内容当作片断。片断实例仍然会正确地渲染内容。不过,它没有一个根节点,它的$el 指向一个锚节点,即一个空的文本节点(在开发模式下是一个注释节点)。
但是更重要的是,组件元素上的非流程控制指令,非 prop 特性和过渡将被忽略,因为没有根元素供绑定:


1

2

3

4

5

6

7

8


<!-- 不可以,因为没有根元素 -->

<example v-show="ok" transition="fade"></example>

<!-- props 可以 -->

<example :prop="someData"></example>

<!-- 流程控制可以,但是不能有过渡 -->

<example v-if="ok"></example>

片段实例也有用处,但是通常情况下组件有一个根节点比较好,它会保证组件元素上的指令和特性能正确的转换,同时性能也稍微好些。

7.路由嵌套

路由嵌套会将其他组件渲染到该组件内,而不是进行整个页面跳转router-view本身就是将组件渲染到该位置,想要进行页面跳转,就要将页面渲染到根组件,在起始配置路由时候写到:


1

2


var App = Vue.extend({ root });

router.start(App,‘#app‘);

这里首先将根组件注册进来,用于将路由中配置好的各个页面渲染出来,然后将根组件挂载到与#app匹配的元素上。

8.实现多个根据不同条件显示不同文字的方法

v-if,v-else可以实现条件选择,但是如果是多个连续的条件选择,则需要用到计算属性computed。例如实现当输入框中什么都没写的时候显示字符串‘empty’,否则显示输入框中的内容,代码如下:


1

2

3

4


<div id="test">

<input type="text" v-model="inputValue">

<h1>{{changeVaule}}</h1>

</div>


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15


new Vue({

el:‘#test‘,

data:{

changeVaule:‘123‘

},

computed :{

changeVaule:function(){

if(this.inputValue!==‘‘){

return this.inputValue;

}else{

return ‘empty‘;

}

}

}

});

9.Vuejs在变化检测问题

1.检测数组

由于javascript的限制,vuejs不能检测到下面数组的变化:

  1. 直接索引设置元素,如vm.item[0]={};
  2. 修改数据的长度,如vm.item.length

为了解决问题1,Vuejs扩展了观察数组,为它添加一个$set()方法:


1

2


// 与 `example1.items[0] = ...` 相同,但是能触发视图更新

example1.items.$set(0, { childMsg: ‘Changed!‘})

问题2,需要一个空数组替换items

除了$set(),vuejs也为观察数组添加了$remove()方法,用于从目标数组中查找并删除元素,在内部调用了splice()。因此,不必:


1

2

3

4


var index = this.items.indexOf(item)

if (index !== -1) {

this.items.splice(index, 1)

}

只需:


1

this.items.$remove(item);

2.检测对象

受ES5的显示,Vuejs不能检测到对象属性的添加或删除。因为Vuejs在初始化时候将属性转化为getter/setter,所以属性必须在data对象才能让Vuejs转换它,才能让它是响应的,例如:


1

2

3

4

5

6

7

8

9

10

11


var data = { a: 1 }

var vm = new Vue({

data: data

})

// `vm.a` 和 `data.a` 现在是响应的

vm.b = 2

// `vm.b` 不是响应的

data.b = 2

// `data.b` 不是响应的

不过,有办法在实例创建之后添加属性并且让它是响应的。对于Vue实例,可以使用$set(key,value)实例方法:


1

2


vm.$set(‘b‘, 2)

// `vm.b` 和 `data.b` 现在是响应的

对于普通数据对象,可以使用全局方法Vue.set(object, key, value):


1

2


Vue.set(data, ‘c‘, 3)

// `vm.c` 和 `data.c` 现在是响应的

有时你想向已有对象上添加一些属性,例如使用 Object.assign() 或 _.extend() 添加属性。但是,添加到对象上的新属性不会触发更新。这时可以创建一个新的对象,包含原对象的属性和新的属性:


1

2


// 不使用 `Object.assign(this.someObject, { a: 1, b: 2 })`

this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })

10.关于vuejs页面闪烁

在vuejs指令中有v-cloak,这个指令保持在元素上直到关联实例结束编译。和CSS规则如[v-cloak]{display:none}一起用时,这个指令可以隐藏未编译的Mustache标签直到实例准备完毕。用法如下:


1

2

3


[v-cloak]{

display:none;

}


1

<div v-cloak>{{message}}</div>

这样<div>不会显示,直到编译结束

11.关于在v-for循环时候v-model的使用

有时候需要循环生成input,用v-model绑定后,利用vuejs操作它,此时我们可以在v-model中写一个数组selected[$index],这样就可以给不同的input绑定不同的v-model,从而分别操作他们。这个我在demo中的dataBind.vue中用到。

12.vuejs中过渡动画

在vuejs中,css定义动画:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18


.zoom-transition{

width:60%;

height:auto;

position: absolute;

left:50%;

top:50%;

transform: translate(-50%,-50%);

-webkit-transition: all .3s ease;

transition: all .3s ease;

}

.zoom-enter, .zoom-leave{

width:150px;

height:auto;

position: absolute;

left:20px;

top:20px;

transform: translate(0,0);

}

其中动画在定的时候要注意上下对应,上面有什么,下面有什么,都要变化的,如果有不变化的,应该抽离出去,作为公共css样式,在上面的css中,如果我只写transform: translate(-50%,-50%);而不写下面的transform: translate(0,0);则会导致上面的transform: translate(-50%,-50%);被添加到下面,认为这个是不变的。

时间: 2024-10-24 04:36:16

Vuejs的一些总结的相关文章

vuejs学习笔记(1)--属性,事件绑定,ajax

属性 v-for 类似于angular中的 ng-repeat ,用于重复生成html片段: <ul id="box"> <li v-for="(v, i) in list">{{v}}</li> </ul> <script> var vm = new Vue({ el: '#box', // 对应的元素选择器 或者是 指向元素的变量 data: { // data list: [1,2,3] } });

vuejs点滴

1.vuejs简介    vue到底是什么? 一个mvvm框架(库).和angular类似  比较容易上手.小巧官网:http://cn.vuejs.org/  手册: http://cn.vuejs.org/api/ 2.vuejs与angular的区别. vue: 简单.易学,指令以 v-xxx,一片html代码配合上json,在new出来vue实例,个人维护项目  ,适合: 移动端项目,小巧 vue的发展势头很猛,github上start数量已经超越angular, angular: 指令

vuejs

vuejs数据双向绑定 下面我们来实现数据双向绑定的例子,我们使用vuejs的v-model属性 注意 v-model 指令在表单控件元素上创建双向数据绑定.它会根据控件类型自动选取正确的方法来更新元素. vuejs双向绑定并不能适用于所有的html表单,限制为input.select.textarea.components. 创建vue-2.html并编辑为 <!DOCTYPE html> <html lang="en"> <head> <m

vuejs + vuex

vuejs 的数据是双向绑定的,而这些数据只是在父组件中,如果各个组件公用的数据就要通过一个容器去管理起来, vuex是不错的选择, 今天看了下vuex的教程: 总结下遇到的问题: vue-cli 了一个项目 import的时候发现了报错:node的版本太低,升级版本就好了. import { mapState, mapActions, mapGetters, map } from "vuex";//注意大括号. https://github.com/lin-xin/notepad/

vueJS+ES6开发移动端APP实战项目笔记

一.什么是MVVM框架 MV*包括MVC.MVP.MVVM MVVM框架由Model.View.ViewModel构成. Model指的是数据,在前端对应的是JavaScript对象. View指的是视图,在前端对应的是DOM ViewModel观察Model和View的变化来做更新,实现了数据的双向绑定. 前端MVVM框架主要包括:angularJS.reactJS.VueJS 二.Vuejs的核心思想(数据驱动.组件化) 1.数据驱动:数据双向绑定 2.组件化: 页面任何部分都可以作为一个组

vuejs心法和技法

http://www.cnblogs.com/kidsitcn/p/5409994.html 注意:本文记录作者在学习和使用vuejs开发中的点点滴滴,从vuejs1.0开始直到现在的vuejs2.0以后的版本.期中部分1.0的内容已经过时,仅作各位朋友参考,建议重点关注2.0相关的内容,会随着我对vuejs有了更多的体会后不断维护更新,也欢迎朋友们批评指正共同学习提高. 所有的vuejs组件都是被扩展的vue实例: var MyComponent = Vue.extend({ //扩展选项对象

vuejs学习笔记(2)--属性,事件绑定,ajax

属性 v-for 类似于angular中的 ng-repeat ,用于重复生成html片段: <ul id="box"> <li v-for="(v, i) in list">{{v}}</li> </ul> <script> var vm = new Vue({ el: '#box', // 对应的元素选择器 或者是 指向元素的变量 data: { // data list: [1,2,3] } });

用vuejs写了一个酷狗的webApp

这几天在学习vueJS,学了半个月,觉得是不是该写点什么呢?于是 .脑子一抽,仿了一个酷狗的webapp. 项目截图: 由于是单页应用,切换路由时音乐不会停止,算是一个小亮点吧. 技术栈: vuejs2.0 vue-router vuex vue-router mint-ui 演示地址和项目地址 github.com/lavyun/vue-kugouMusic 如果有刚刚开始学习vuejs的同学可以把项目clone下来 可以看看vue单页应用的构建方式,或者怎么写路由...这个项目根据本人深入程

一次页面从Jq到Vuejs+PartialView的迁徙

题外话 本篇分享不能帮助你入门vue,入门的文章也是无意义的,官方文档http://cn.vuejs.org/v2/guide/ 已经写的不能再清晰了.希望我们勇敢的主动地给自己创造实践的机会. 手里有一个功能还不是很多的PC端页面,考虑到下一个版本,要把IOS,安卓和公众号上拥有的功能也要添加到PC上,便在周三开始了解Vue,周末花了些时间,做了到vue的改版. 本篇简单记录下这次经历.Vue并不是MVVM的框架,而是MVVM中的VM-ViewModel.对接口数据的获取还是要依赖于ajax,

vuejs能否监控localStorage的变化?

https://segmentfault.com/q/1010000006806036 1.问题 用vue.js过程中了解到计算属性,它类似于定义了一个函数f,f的返回值依赖于某些变量a,b,c.当a,b,c中任意一个发生变化,就调用f得到新的返回值. 我现在用token做登录身份验证,使用到localStorage,在computed中编写"函数",根据localStorage的值,在导航栏显示不同的链接:已经登录的显示"用户名"和"退出",未