vue2.0

vue 2.0

渐进式框架

MVC 单向通信

> m:model 数据层 保存数据

> v:view视图层  用户界面

> c:controller 控制器 业务逻辑

> 用户操作界面,通过DOM事件,向控制器发送指令, 执行相应业务逻辑 通知数据层保存或修改状态,在由数据层反馈给视图层;

view(视图层)-->controller(控制器)-->model(数据层)-->vive(返回给视图层)

angular 是单项数据绑定 mvc

mvvm 双向数据绑定

>m:model数据层 保存数据

>v:view视图层  用户界面

>vm:viewModel视图模型

双向绑定

>view(视图层)-->viewModel(视图模型)-->model(数据源)

>1:view(视图层)改变了,viewModel(视图模型)也会改变,model数据源跟着会更新

>2:model数据更新了,也会通知viewModel(视图模型)改变,view(视图层)会跟着改变

vive是双向数据绑定

vue初始化实例

> 初始化一个Vue根实例

> 他需要一个参数对象options

> el挂载元素--他不能挂载在body上面

> data数据(viewModel) 方法 生命周期钩子 template(模板)

>

{{title}}

varvm=newVue({

el:'#app',

data:{

title:'hello ni hao'

}

})

> vue根实例  vm代理data

> vm.title; 得到'hello ni hao'

vue 压缩和不压缩

> 通常开发阶段 引入不压缩版 报错提示便于调试

> 压缩版 vue.min.js是没有报错提示的(开发阶段用這个)

根实例前面带

一个页面,我们通常只生成一个实例

//1:生成一个vue根实例,并传入一个参数对象

varobj={

title:'动态',

say:''

}

varvm=newVue({

el:'#app',

data:obj

})

//vm根实例 会暴露出属性和方法 前面带$

console.log(vm.$data);

console.log(vm.$el);

obj.title='bhhhsuj';//可以修改实例

obj.say='jjsj';//不能在实例生成后再添加属性

vm.$mount('#app');手动挂载元素

$watch

vm.$watch('title',function(newVal,oldVal){

/*

*@par:newVal新添加的值

*@par:oldVal 旧值

* */

console.log(newVal, oldVal);

});

setTimeout(function(){

vm.title='nnn'

},3000)

模板语法

{{}}

> 1:{{text}} 薄伟玲  可以看到编译前的样子,后面的内容也能显示(可以看到在里面添加的文本)

> 2:不识别html标签

> 3:v-cloak  [v-cloak]{ displat:none} 编译前就是一个普通的属性选择器

避免闪烁也可以使用{{}}来插入值

> 4:可以走三元运算/content=content||'没有值'

> 5:可以进行简单的运算

> 6:可以进行转换大小写

> 7:v-once="";一次性插入 插入以后不能在修改了

v-xxx=’xxx’

>1:v-text='text'  薄伟玲  避免了闪烁  避免看不到编译前的样子 看不到添加的文本,覆盖了

>2:v-text='text' 可以识别html标签 尽量少用 避免xss攻击

>

插入动态属性v-bind

插入动态属性v-bind

{{linkText}}

data:{ link:'www.baidu.com',

linkText:百度

}

缩写:

{{linkText}}

v-bind:style

:--> v-bind:的缩写

> :style="{width:'100px',height:'100px',background:'red'}"

> v-bind:style="styleObj"

>

v-bind:sclass

动态绑定class

v-bind:class=''

> 与静态class是共存的

> 对象写法 样式名 booleantrue添加false不添加

> 数组写法 [s1,s2]

v-if 判断指令

v-if=“true”;

插入和移除的作用,操作的是DOM

true是插入显示操作

false是移除不显示操作

v-show true显示/false隐藏

v-for

要循环谁 就把 v-for写在谁身上

{{key}} : {{val}}

-->

nameis{{result.name}}  ageis{{result.age}}

v-model

文本框的内容改变 P标签的内容也改变

{{name}}

应用于表单中双向数据绑定 文本框 radio checkbox select textarea

双向绑定 数据改变 视图也改变 视图改变 数据也改变

methods事件集合

v-on绑定事件 click 事件类型say处理函数

> v-on:click="say"缩写 @click="say"

>say()不传参的话默认事件对象

> $event 特殊变量 代表的是事件对象

new Vue({

el:'#app',

data:obj,

methods:{

say:function(e,event){ 存放事件方法 集合

this-->当前的vue根实例

event-->$event 事件对象

}

}

})

filter只要不是当前這一项,其他的都返回出去

v-on 事件修饰符

> v-on:click.parevent阻止默认事件,执行事件不跳转(a标签先执行事件,不跳转)

> v-on:click.stop阻止冒泡传播 修饰符 事件类型  (给谁阻止默认行为,就给他這个stop)

> 修饰符可以串联写法 v-on:click.parevent.stop

> v-on:click.capture捕获阶段capture 从外到内

> v-on:click.one只触发一次点击事件

> v-on:submit.prevent阻止表单的默认行为

按键修饰符

> v-on:click@keyup.enter按下回车键触发 (v-on:click@keyup.keyCode)

> @keyup.space空格

> @keyup.escesc 其他的键码不好使

> @keyup.delete按下删除的键的delete

> @keyup.tab按tab

> @keyup.up上

> @keyup.down下

> @keyup.left左

> @keyup.right右

computed 计算属性

计算属性是默认getter方法

页面一打开的时候,就执行了。 只能在组件里面

computed 通过一个属性 计算出来一个新的属性 当這个属性变化时,新的属性也会跟着变化

varvm = new Vue({

el:'#app',

data:{price:100,count:10,name:'飞机'},

computed:{

//sum属性由两部分组成 (获取,设置)

sum:{

get(){//展示就是获取

//如果price和count变化会导致 sum变化

returnthis.price *this.count;

},

set(val){//赋值就是设置 vm.sum = 100;

//sum变化有可能会改变name变化,computed属性中this依然是vm

this.name =val;

}

}

/*sum() {

return this.price * this.count;

}*/

}

});

watch监听

newVue({

el:'#app',

data:{

val:''

},

watch:{//监听

val(newVal,oldVal){//新值 旧值

console.log(newVal,oldVal)

}

}

});

生命周期钩子函数

- 生命周期钩子函数

letvm=newVue({

el:'#app',

data:{

title:'hello vue.js'

},

beforeCreate(){

alert('实例创建前')

},

created(){

alert('实例创建后')

},

//准备挂载数据

beforeMount(){

alert('数据元素挂载前')

},

mounted(){

alert('数据元素挂载后')

},

//销毁组件的

beforeDestroy(){

alert('销毁前')

},

destroyed(){

alert('销毁后')

},

//数据更新

beforeUpdate(){

alert('更新数据状态')

},

updated(){

alert('更新完成')

}

})

过滤器

1.0有过滤器2.0只能自己定义过滤器

> {{message | uppercase}}

//自定义过滤器

Vue.filter('uppercase',function(){

return arguments[0].toUpperCase();

});

letvm=new Vue({

el:'#app',

data:{

message:'hello word'

}

});

> currency货币过滤器

{{100| currency:'£'}}

> lowercase & uppercase大小写转换过滤器

{{'abc'| uppercase }}

{{'ABC'| lowercase }}

> limitTo限制位数

{{123456| limitTo:5}}

> number数字过滤器

{{1234.2345|number:2}}

> json对象过滤器

{{{aa:123,bb:456} | json}}

> date日期过滤器

{{1654325689063| date:'yyyy-MM-dd hh:mm:ss'}}

> orderBy排序orderBy:'字段名字':'正反序'(true/false)

{{p.name}}

//$emit发射器

//子组件 需要借助 this.$emit发布相应自定义事件

//父组件 需要在子组件 身上 通过 v-on:自定义事件类型 = 事件处理器, 进行监听 并处理

vue组件

组件可以多级嵌套

全局组件

组件是一个vue强大的功能 扩展html元素 代码重复利用

> 全局组件 在初始化实例之前,注册全局组件

> 参数:

> 1:@param1组件名 多个单词my-compoent 也可以是单个单词 comp

> 2:@param2参数对象 配置 组件 结构(template) 行为(methods) 数据(data).....

> 注意:

> 1:组件data必须是一个函数 返回return 一个对象 data里面存放的是返回页面的数据 title這一类的变量

> 2:组件名不能使用div h3 这些已经存在的标签 要用自定义的标签

> 3:在结构template模板里面,只能有一个根元素,例如一个div套着一个标签,不能有两个div

> 4:可以用多个实例,

> Vue.component('my-compoent组件名');

局部组件

> 局部组件

- 注意:一个单词的话:child就可以了  多个单词用字符串包起来'my-comp1';

newVue({

el:'#app1',

components:{//局部注册组件

'my-comp1':{

template:'

my-comp1

'

},

child:{

template:'

child

'

}

}

});

data

> 组件的data是一个函数

> 每创建一个组件 返回一个新的属于当前组件组件私有data对象

components: {

child: {

template: '

{{val}}

',

data() {  组件的data是一个函数

return{val: 'hello'}; // 每创建一个组件 返回一个新的属于当前组件组件私有data对象

}

}

父子组件props

> 父子组件通信  通过props 接收外部 传递进来的数据

> 子组件 不可以 直接使用 父组件的 数据

> props 用来 从父组件 传递数据 给子组件

> props 单向数据流  父组件 传递给 子组件数据 父组件 修改了 子组件也跟着修改,但是 子组件不能修改父组件  提示 警告

>

>从子组件外部传递数据 mess='liwenli' 这样的传递都是string

>如果想传递 动态属性 需要 v-bind

let child = {

props: ['myMess','say'],

> 指定 用来接收 传递进来的的数据属性 如果属性名是驼峰命名myMess

> 在 外部使用的时候 全小写 '-' 隔开

> template: '

{{say}}{{myMess}}

',

template: '

{{say}}{{myMess}}

',

};

new Vue({

el: '#app',

data: {

title: 'parentData'

},

components: {

child

}

});

$emit 发射器

> 子组件 需要借助 this.$emit 发布相应自定义事件

> 父组件 需要在子组件 身上 通过 v-on:自定义事件类型 = 事件处理器, 进行监听 并处理

> 接收子组件的通知 并触发 listen(父组件中的定义的处理函数)


子组件传递过来的数据:{{mess}}

newVue({

el:'#app',

data: {

mess:'等待接收'

},

methods: {

listen(val){

console.log(val);// 接收到 子组件的msg

this.mess = val;

alert('收到子组件通知');

}

},

components: {// 定义一个子组件

child: {

template:'

子组件发布

',

data(){

return{msg:'我是子组件传递过来的数据'}

},

methods: {

say(){

alert('子组件进行发布');

//    liwenli 自定义事件类型

//      this.msg要传给父组件的数据 在发布的时候以参数的 形式传递过去

this.$emit('liwenli',this.msg);// 发布自定义事件

}

}

}

}

});

slot 分放内容 分配位置

> 想把里面的内容插入到文字的前面或者后面,直接把這个标签放进去就行了。放在前面或者后面或者给他起名字,插入到前面后面

>

头部信息

标题

底部信息

new Vue({

el: '#app',

components: {

child: {

//    template: '

这是一个主体内容

'

//      具名 slot

template: `

这是一个主体内容

`

}

}

});

is 指定模板插入位置

- keep-alive 缓存组件状态,修改以后,会保存上次修改的内容 必秒重新渲染加载了

-is需要一个component這个标签来嵌入模板,需要把哪个模板引入进去,那就写上他的组件名就行了

users:

books:

--------------->

newVue({

el:"#app",

data:{

comp:'users'

},

components:{

users:{

template:'

',

data(){

return{

val:'users components'

}

}

},

books:{

template:'

',

data(){

return{

val:'books components'

}

}

}

}

})

vue 过渡效果

> name-enter 指定进入过渡开始状态

> name-enter-active 指定进入过渡激活结束状态

> name-leave 指定离开过渡开始状态

> name-leave-active 指定离开过渡激活结束状态

显示/隐藏

// v-show

// 组件切换

newVue({

el:'#app',

data: {

flag:false,

styleObj: {

width:'100px',

height:'100px',

backgroundColor:'red'

}

}

});

animated


我是 animate.css

vue路由 vue-router

> spa单页应用 在一个页面中,切换导航展示响应内容,局部刷新不需要跳转 重新加载整个页面

> 前端路由 在一个页面切换多个页面

导航必须這么写

- router-link是路由标签,他代表页面中的a标签

- to 后面的是路由路径

- router-view他是一个占位符,会把路由标签解析程a标签 必须要写

- keep-alive 避免重复加载,第一次填写的内容,他可以历史记录出来

首页

路由步骤

1.创建组件

let Index = {

template:'

这是首页

'

};

2.配置路由规则 路由路径 映射 组件

let routes = [

{path:'/index',component:Index},

{path:'*',redirect:'/index'} 默认路由

];

3.创建路由实例

let router=newVueRouter({routes:routes});

4.根实例中注入路由router:创建的路由实例 (newVueRouter({routes}))

newVue({

el:'#app',

router:router

})

动态路由

>1:route.params.key 用来获取路径参数-id也可以是name- 获取问号后面的查询参数

>2:全局钩子函数 每次切换之前都会触发,要做权限认证

router.beforeEach(function(to,from,next){})

-to要到哪个路由

- from 从哪个路由开始

-next控制是否继续 也可以传递参数 必须写next

>3:局部的可以写在局部组件里面

letIndex = {

template:'

这是首页

',

beforeEach(to,from,next){ 当你切换到当前路由之前触发

}

};

>4:this.$router.push('/')切换到指定路由 记录history

>5:this.$router.replace('/')替换路径 不会记录history 两个效果一样

>6:this.$router.go()-1就是回到上一个页面 -2参数就是回到上两个页面 后退

> this.$router.back(1)back是后退 传的是正值

>7:watch(){ 监听

}

vue单文件组件

(vue-clivue脚手架)

> 自定义后缀是.vue文件,一个文件就是一个组件(功能 结构 样式 数据状态)

> 如果想使用vue单文件组件,需要借助编译工具 比如webpack browserify 编译程可以识别的

> vue-cli (vue脚手架):将基本环境搭建好,然后我们基于這个环境开发

> npm install vue-cli -g

> vue list 安装之后,需要下载哪些列表

> 安装完以后,可以使用vue命令

-vue init   模板名字 项目名字  初始化一个项目

-模板类型:

-webpack - A

-webpack-simple - A

-browserify - A

-browserify-simple - A

-simple

下载之后,做這几步骤

> 1:cd 项目名myvue  进入项目

> 2:安装依赖 npm install

> 3:开启server 阅览 npm run dev 這个server是webpalk帮我们搭建的

import

importVuefrom'vue'在js里面导入vue

初始化

vue init webpack-simple myvue2

cd myvue2

npm install

npmrundev

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • UI组件 element - 饿了么出品的Vue2的web UI工具套件 Vux - 基于Vue和WeUI的组...
    鲁大师666阅读 43,386评论 5 97
  • UI组件 element - 饿了么出品的Vue2的web UI工具套件 Vux - 基于Vue和WeUI的组件库...
    卞卞村长L阅读 1,704评论 0 8
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,207评论 0 6
  • 青春如同沙漏 已开始 无法停止 我用笔把词一改再改 仍无法写尽青春的呆 我们曾向浩瀚的星空许下 不悔的诺言 转瞬徘...
    东哥工作室阅读 191评论 0 1
  • 从科技馆出来的时候 闻到了入秋后第一阵桂花香 凉风吹进嘴里面 那日东湖的桂花藕粉则更甜了 想起已是六七年以前 却不...
    金容与阅读 159评论 0 5