1.vue是什么
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
1是一套用于构建用户界面的渐进式框架
2与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用
3Vue 的核心库只关注视图层,易于上手,还便于与第三方库或既有项目整合。
4Vue 也完全能够为复杂的单页应用提供驱动。
2.数据交互
基础数据与属性交互
v-bind:属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <div id="app" v-bind:title='msg1'> {{message}} </div>
var app = new Vue({ el:'#app', data:{ message:'hellow Vue1', msg1:'这是一个标题' } })
常规数据绑定加{{}} 元素属性绑定不加{{}}
|
与 Style 绑定
绑定类名v-bind:class
1 2 3 4 5 6 7 8 9 10 11 12
| 我们可以传给 v-bind:class 一个对象,以动态地切换 class:
<div v-bind:class="{ active: isActive }"></div> 和如下 data:
data: { isActive: true, hasError: false } 结果渲染为:
<div class="static active"></div>
|
1
| <div v-bind:class="{ active: isActive }"></div>
|
语法表示 active 这个 class 存在与否将取决于数据 property isActive 的 truthiness。
对象语法
1 2 3 4 5 6 7 8 9 10 11
| HTML <div v-bind:class="classObject"></div>
js data: { classObject: { active: true, 'text-danger': false } }
|
计算属性控制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <div v-bind:class="classObject"></div>
data: { isActive: true, error: null }, computed: { classObject: function () { return { active: this.isActive && !this.error, 'text-danger': this.error && this.error.type === 'fatal' } } }
|
数组语法
1
| v-bind:class="[activeClass, errorClass]"
|
三元表达式
1
| v-bind:class="[isActive ? activeClass : '', errorClass]"
|
数组混合对象语法
1
| v-bind:class="[{ active: isActive }, errorClass]"
|
在组件上
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 例如,如果你声明了这个组件:
Vue.component('my-component', { template: '<p class="foo bar">Hi</p>' }) 然后在使用它的时候添加一些 class:
<my-component class="baz boo"></my-component> HTML 将被渲染为:
<p class="foo bar baz boo">Hi</p> 对于带数据绑定 class 也同样适用:
<my-component v-bind:class="{ active: isActive }"></my-component> 当 isActive 为 truthy[1] 时,HTML 将被渲染成为:
<p class="foo bar active">Hi</p>
|
绑定内联样式v-bind:style
1 2
| <header :style="{height: `calc(1.06rem + ${statusBarHeight}px)`, paddingTop: `${statusBarHeight}px`}">
|
对象语法
1
| v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"
|
数组语法
1
| v-bind:style="[baseStyles, overridingStyles]"
|
多重值
1
| :style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"
|
子组件样式给style加scoped (作用域)这样不会影响父组件
1 2 3 4 5
| <style scoped> .licolor{ color: green; } </style>
|
使用less或scss
1 2 3 4 5
| <style scoped lang='less'> .licolor{ color: green; } </style>
|
style 动态拼接
1 2 3 4
| <div class="metop_title" :style="{ height: `calc(1.06rem + ${statusBarHeight}px)`, paddingTop: `${statusBarHeight}px`, }">我的</div>
|
数据更改
更改data数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <div id="app3"> <p v-for="everylast in boxs"> {{everylast.text}} </p> </div>
var app3 = new Vue({ el:' data:{ boxs:[ {text:1}, {text:2}, {text:3} ] } })
数据更改 app3.boxs.push({text:4})
|
可以看vue实例-》数据与方法
https://cn.vuejs.org/v2/guide/instance.html
添加事件监听
v-on
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <div id="app4"> <p>{{app4message}}</p> <button v-on:click="reversefn">点击翻转</button> </div>
var app4 = new Vue({ el:'#app4', data:{ app4message:'这是一句话' }, methods:{ reversefn:function(){ this.app4message = this.app4message.split('').reverse().join('') } } })
|
数据的双向绑定
v-model
1 2 3 4 5 6 7 8 9 10 11 12 13
| <div id="app5"> <p>{{message}}</p> <input type="text" v-model="message"> </div>
var app5 = new Vue({ el:'#app5', data:{ message:'实时数据的双向绑定' } })
|
v-text 和 v-html 可以代替差值表达式
属性数据的双向绑定
v-bind 可缩写为 :bind
1 2 3 4 5 6 7 8 9 10 11 12 13
| html <h1 v-on:click='msgfn' v-bind:title='title'>{{msg}}</h1>
js <script> new Vue({ data:{ msg:'hello word', title:'这是个信息' }, }) </script>
|
表单输入绑定
基础用法v-model
1
| 你可以用 v-model 指令在表单 <input>、<textarea> 及 <select> 元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但 v-model 本质上不过是语法糖。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。
|
文本
1 2
| <input v-model="message" placeholder="edit me"> <p>Message is: {{ message }}</p>
|
多行文本
1 2 3 4
| <span>Multiline message is:</span> <p style="white-space: pre-line;">{{ message }}</p> <br> <textarea v-model="message" placeholder="add multiple lines"></textarea>
|
1
| 注意:在文本区域插值 (<textarea>{{text}}</textarea>) 并不会生效,应用 v-model 来代替。
|
复选框
单个复选框,绑定到布尔值:
1 2
| <input type="checkbox" id="checkbox" v-model="checked"> <label for="checkbox">{{ checked }}</label>
|
多个复选框,绑定到同一个数组:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <input type="checkbox" id="jack" value="Jack" v-model="checkedNames"> <label for="jack">Jack</label> <input type="checkbox" id="john" value="John" v-model="checkedNames"> <label for="john">John</label> <input type="checkbox" id="mike" value="Mike" v-model="checkedNames"> <label for="mike">Mike</label> <br> <span>Checked names: {{ checkedNames }}</span> new Vue({ el: '...', data: { checkedNames: [] } })
|
单选按钮
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <div id="example-4"> <input type="radio" id="one" value="One" v-model="picked"> <label for="one">One</label> <br> <input type="radio" id="two" value="Two" v-model="picked"> <label for="two">Two</label> <br> <span>Picked: {{ picked }}</span> </div> new Vue({ el: '#example-4', data: { picked: '' } })
|
选择框
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 单选时:
<div id="example-5"> <select v-model="selected"> <option disabled value="">请选择</option> <option>A</option> <option>B</option> <option>C</option> </select> <span>Selected: {{ selected }}</span> </div> new Vue({ el: '...', data: { selected: '' } })
|
用 v-for 渲染的动态选项:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <select v-model="selected"> <option v-for="option in options" v-bind:value="option.value"> {{ option.text }} </option> </select> <span>Selected: {{ selected }}</span> new Vue({ el: '...', data: { selected: 'A', options: [ { text: 'One', value: 'A' }, { text: 'Two', value: 'B' }, { text: 'Three', value: 'C' } ] } })
|
3.组件化应用构建
创建组件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Vue.component('todo-item', { template: '<li>123</li>' })
var app6 = new Vue({ el:'#app6', data:{ i } });
HTML <ol id="app6"> <todo-item></todo-item> </ol>
|
组件传值
父组件子组件互相传值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| html <div id="demo"> <input type="text" v-model="valuedata"> <button @click='sub_fn'>提交</button> <ul> <item-li v-for="(item,index) in lists" :key="index" :content="item" :index="index" @delete="handledelete"></item-li> </ul> </div>
js <script> Vue.component('item-li',{ props:['content','index'], template:'<li @click="handleclick">{{content}}</li>', methods:{ handleclick:function(){ this.$emit('delete',this.index) } } }) new Vue({ el:'#demo', data:{ valuedata:'', lists:[] }, methods:{ sub_fn:function(){ this.lists.push(this.valuedata) }, handledelete:function(e){ this.lists.splice(e,1) } } }) </script>
|
定”。