vue入门学习
var vm = new Vue { el: "#my_id" , data: { name: "test" ,url: "" ,txt:"测试" } ,methods: { GetData: function(){ //获取数据 return this.txt; } } ,computed: { // 计算属性的 getter reversedMessage: function () { // `this` 指向 vm 实例 return this.txt.split('').reverse().join('');//反转字符串 } } ,filters: { capitalize: function (value) { if (!value) return ''; return value; } } }; <div id = "my_id"> {{ txt| capitalize }} </div> data 用于定义属性,实例中有3个属性分别为:name、url、txt; methods 用于定义的函数,可以通过 return 来返回函数值; 调用实例属性和方法: vm.$el == "my_id"; alert(vm.$data); methods,computed,效果上两个都是一样的; computed 基于依赖缓存,只有相关依赖发生改变时才会重新取值。 而使用 methods ,在重新渲染的时候,函数总会重新调用执行。
computed 属性默认只有 getter ,不过在需要时你也可以提供一个 setter
var vm = new Vue({ el: '#app', data: { name: 'a', url: 'http://www.google.com' }, computed: { site: { // getter get: function () { return this.name + ' ' + this.url }, // setter set: function (newValue) { var names = newValue.split(' ') this.name = names[0] this.url = names[names.length - 1] } } } }) // 调用 setter, vm.name 和 vm.url 也会被对应更新 vm.site = 'B http://www.baidu.com';
v-html: 输出html代码 <div id="app"> <div v-html="message"></div> </div> <script> new Vue({ el: '#app', data: { message: '<h1>菜鸟教程</h1>' } }) </script> 指令: 带有 v- 前缀的特殊属性 v-bind 被用来响应地更新 HTML 属性 v-if/v-else-if/v-else v-show v-for v-model : 在input、select、textarea、checkbox、radio 等表单控件元素上, 创建双向数据绑定,根据表单上的值,自动更新绑定的元素的值。 v-on 监听 DOM 事件
v-for:
<div id="app">
<ul>
<li v-for="value in object"> {{ value }} </li>
</ul>
<ul>
<li v-for="(value, key)in object">{{key}}: {{ value }} </li>
</ul>
<ul>
<li v-for="(value, key, index)in object">{{index}}.{{key}}: {{ value }} </li>
</ul>
</div>
<script> new Vue({ el: '#app', data: { object: { name: 'a', url: '' } } }) </script>
//监听属性 <div id = "computed_props"> 千米 : <input type = "text" v-model = "kilometers"> 米 : <input type = "text" v-model = "meters"> </div> <p id="info"></p> <script type = "text/javascript"> var vm = new Vue({ el: '#computed_props', data: { kilometers : 0, //双向绑定 meters:0 }, methods: { }, computed :{ }, watch : { //实例监听 kilometers:function(val) { this.kilometers = val; this.meters = this.kilometers * 1000 }, meters : function (val) { this.kilometers = val/ 1000; this.meters = val; } } }); // $watch 是一个实例方法 vm.$watch('kilometers', function (newValue, oldValue) { // 这个回调将在 vm.kilometers 改变后调用 document.getElementById ("info").innerHTML = "修改前值为: " + oldValue + ",修改后值为: " + newValue; }); </script>
v-bind:class 设置一个对象(字符串或数组),从而动态的切换 class: <div class="static active text-danger"></div> <div class="static"v-bind:class="{ 'active' : isActive, 'text-danger' : hasError }"></div> <div v-bind:class="{ 'active': isActive }"></div> <div v-bind:class="[activeClass, errorClass]"></div> v-bind:style 直接设置样式: <div id="app"> <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">test</div> </div> <div v-bind:style="styleObject">test</div> <div v-bind:style="[baseStyles, overridingStyles]">test</div>
v-on:click: 事件处理 <!-- `greet` 是在定义的方法名 --> <button v-on:click="greet">Greet</button> 处理 DOM 事件细节修饰符,通过由点 . 表示的指令后缀来调用修饰符 .stop - 阻止冒泡 .prevent - 阻止默认事件 .capture - 阻止捕获 .self - 只监听触发该元素的事件 .once - 只触发一次 .left - 左键事件 .right - 右键事件 .middle - 中间滚轮事件 例如: <!-- 阻止单击事件冒泡 --> <a v-on:click.stop="doThis"></a> <!-- 提交事件不再重载页面 --> <form v-on:submit.prevent="onSubmit"></form> <!-- 修饰符可以串联 --> <a v-on:click.stop.prevent="doThat"></a> <!-- 只有修饰符 --> <form v-on:submit.prevent></form> <!-- 添加事件侦听器时使用事件捕获模式 --> <div v-on:click.capture="doThis">...</div> <!-- 只当事件在该元素本身(而不是子元素)触发时触发回调 --> <div v-on:click.self="doThat">...</div> <!-- click 事件只能点击一次,2.1.4版本新增 --> <a v-on:click.once="doThis"></a> 监听键盘按键事件修饰符: .enter .tab .delete (捕获 "删除" 和 "退格" 键) .esc .space .up .down .left .right .ctrl .alt .shift .meta 例如: <!-- 只有在 keyCode 是 13 时调用 vm.submit() --> <input v-on:keyup.13="submit"> <!-- 同上 --> <input v-on:keyup.enter="submit"> <!-- 缩写语法 --> <input @keyup.enter="submit"> <p><!-- Alt + C --> <input @keyup.alt.67="clear"> <!-- Ctrl + Click --> <div @click.ctrl="doSomething">Do something</div>
<!-- 在 "change" 而不是 "input" 事件中更新 --> <input v-model.lazy="msg" > <!-- 输入值转为 Number 类型(如果原值的转换结果为 NaN 则返回原值) --> <input v-model.number="age" type="number"> <!-- 自动过滤用户输入的首尾空格 --> <input v-model.trim="msg">