Vue入门:常用的指令
<div v-html="url"></div> data:{ url:'<a href="www.baidu.com">百度</a>' }
<span v-text="message"></span> const app=new Vue({ el:"#app", data:{ message: "这里可以包含html标签" } })
如果只是单独展示Vue对象里的数据,建议使用“v-text”指令,v-text解决差值表达式闪烁问题
<span v-pre>{{msg}}</span>
HTML: <div id="app" v-cloak> {{context}} </div> CSS: [v-cloak]{ display: none; }
<a v-bind:href="url"></a> <!-- 完整语法 --> <a :href="url"></a> <!-- 缩写 -->
如果是绑定函数必须要加上()
<li :class="listData()">绑定函数</li>
<a v-on:click="doSomething"></a> <!-- 完整语法 --> <a @click="doSomething"></a> <!-- 缩写 -->
如果不需要传参数,绑定函数可以不加上()
<button @click="add">+</button>
<div v-if="type === 'A'"> A </div> <div v-else-if="type === 'B'"> B </div> <div v-else-if="type === 'C'"> C </div> <div v-else> Not A/B/C </div>
<div id="app"> <span v-if="isUser"> 用户:<input type="text" id="name" placeholder="用户" key="name"> </span> <span v-else> 密码:<input type="text" id="pew" placeholder="密码" key="pew"> </span> <button @click="isUser = !isUser">提交</button> </div> const app = new Vue({ el:"#app", data:{ isUser:true, }, });
<li v-for="todo in todos" v-if="!todo.isComplete"> {{ todo }} </li>
v-show
的元素始终会被渲染并保留在 DOM 中。v-show
只是简单地切换元素的 CSS 属性 display
。
注意:v-show
不支持 <template>
元素,也不支持 v-else
。
(2)一般来说,v-if
有更高的切换开销,而 v-show
有更高的初始渲染开销。因此,如果需要非常频繁地切换,则使用 v-show
较好;如果在运行时条件很少改变,则使用 v-if
较好。
<ul id="example-1"> <li v-for="item in items"> {{ item.message }} </li> </ul> var example1 = new Vue({ el: '#example-1', data: { items: [ { message: 'Foo' }, { message: 'Bar' } ] } })
<ul id="example-2"> <li v-for="(item, index) in items"> {{ parentMessage }} - {{ index }} - {{ item.message }} </li> </ul>
(3)v-for还可以有第三个参数作为索引:
<div v-for="(value, name, index) in object"> {{ index }}. {{ name }}: {{ value }} </div> data: { object: { title: 'How to do lists in Vue', author: 'Jane Doe', publishedAt: '2016-04-10' } }
<div v-for="item of items"></div>
<div v-for="item in items" v-bind:key="item"> {{item}} </div> data: { items: ['a','b','c'] }
<!-- 在 双花括号 中 --> <h3>{{price | createPrice}}</h3> <!-- 在 `v-bind` 中 --> <div v-bind:id="price | createPrice"></div> data:{ price:12, }, filters:{ createPrice(value){ return value.toFixed(2); } }
或者在创建 Vue 实例之前全局定义过滤器:
Vue.filter('createPrice', function (value) { return value.toFixed(2); }) const app = new Vue({})
注:全局过滤器要在app前面才有效
计算属性将被混入到 Vue 实例中。所有 getter 和 setter 的 this 上下文自动地绑定为 Vue 实例。
示例
var vm = new Vue({ data: { a: 1 }, computed: { // 仅读取 aDouble: function () { return this.a * 2 }, // 读取和设置 aPlus: { get: function () { return this.a + 1 }, set: function (v) { this.a = v - 1 } } } }) vm.aPlus //输出:2 vm.aPlus = 3//执行set函数 vm.a //输出:2 vm.aDouble //输出:4
methods和computed(计算属性)区别
(1)计算属性只能当作属性用,不能带参数,有缓存,效率高
(2)方法可以直接调用,可带参数,没有缓存,每次调用都会执行,效率不如计算属性高。
<div id="app"> <label for="name"> <!--input事件:这里只要改动,就触发newValue--> 用户:<input type="text" id="name" v-model="user" @input="newValue"> <!--value属性--> <input type="text" :value="user" @input="newValue"> </label> <h3>{{user}}</h3> </div> data:{ user:"", }, methods:{ newValue(event){ //动态input获取的值 console.log(event.target.value); } }
(2)checkbox 和 radio 使用 checked
属性和 change
事件;
(3)select 字段将 value
作为 prop 并将 change
作为事件。
2、修饰符
(1)lazy
在默认情况下,v-model
在每次 input
事件触发后将输入框的值与数据进行同步 (除了上述输入法组合文字时)。你可以添加 lazy
修饰符,从而转变为使用 change
事件进行同步:
<!-- 在“change”时而非“input”时更新 --> <input v-model.lazy="msg" >
(2)number
用户输入的值默认是String,如果想自动将用户的输入值转为数值类型,可以给 v-model
添加 number
修饰符:
<input v-model.number="age" type="number">
(3)trim
<input v-model.trim="msg">
3、v-model和v-bind
3.1、vue绑定数据有三种方式:
(1)插值,也就是{{name}}的形式,以文本的形式和实例data中对应的属性进行绑定
(2)v-bind:
(3)v-model:
3.2、区别:
(1)v-bind和“{{}}”(mustache插值)只是单向变动,v-model是双向绑定
(2)绑定的类型不同:
v-model: <input>
、<textarea>
及 <select>
<input>
、<textarea>
及 <select>
v-bind支持的类型:html中的属性、css的样式、对象、数组、number 类型、bool类型
vue官网: