1、TCL脚本基本语法(概要)
983 2023-04-03 03:20:37
<div id="app"> <div>{{msg}}</div><!-- 1.提供标签用于填充数据 插值表达式--> <div>{{1+2}}</div> <div>{{msg+'----'+'123'}}</div></div> <script type="text/javascript" src="js/vue.js"></script><!-- 2.引入 vue.js 库文件 --> <script type="text/javascript"> var vm = new Vue({ // 3.使用 vue语法做功能 el:'#app', // el:告诉vue,你要把这个数据填充到什么位置 // #app:严格的id选择器 data: { // data:用于提供数据 msg:'hello vue' } }); //用于存储vue的实例 </script>
把数据填充到HTML标签中。
原理 :先通过样式隐藏 再替换 替换好了再显示出来
[v-cloak] { display: none;}
<div v-cloak>{{msg}}</div>
<div v-text='msg'></div>
<div v-html='msg'></div> <!-- msg:'<h1>html</h1>' -->
就是在控制器中 使用vm.msg可以改变页面中msg的值 但是如果给他加上v-once就只能是他最初编译出来的 不能再修好了
数据的变化导致页面内容的变化
<div id="app"> <div>{{msg}}</div> <div> <input type="text" v-model='msg'> <!-- 页面影响数据 通过修改input中的值 可以直接影响到上面插值表达式中的值 --> </div> </div> <script type="text/javascript" src="js/vue.js"></script> <script type="text/javascript"> var vm = new Vue({ el:'#app', data: { msg:'hello' } }); </script>
model数据
view视图 模板 dom
View-Model 结合
cn.vuejs.org/v2/api/#v-o…
<button v-on:click='num++'>{{num}}</button>
<button @click='num++'>{{num}}</button>
函数形式
<div id="app"> <div> <button v-on:click='handle'>{{num}}</button> </div> </div> <script type="text/javascript" src="js/vue.js"></script> <script type="text/javascript"> var vm = new Vue({ el:'#app', data: { num: 0 }, methods: { handle: function() { this.num++; // this是vue的实例对象 } } }); </script>
接收事件对象
$event
<div id="app"> <div> <button v-on:click='handle(123, $event)'>{{num}}</button> </div> </div> <script type="text/javascript" src="js/vue.js"></script> <script type="text/javascript"> var vm = new Vue({ el:'#app', data: { num: 0 }, methods: { handle: function(a, event) { console.log(a); // 123 console.log(event.target.tagName); // BUTTON console.log(event.target.innerHTML); // 0 this.num++; // this是vue的实例对象 } } });
@click.stop
<div id="app"> <div>{{num}}</div> <div @click='handle0()'> <button @click.stop='handle1()'>点击1</button> </div> </div> <script type="text/javascript" src="js/vue.js"></script> <script type="text/javascript"> var vm = new Vue({ el:'#app', data: { num: 0 }, methods: { handle0: function() { this.num++; }, handle1: function() { } } }); </script>
.prevent
<a href="http://www.baidu.com" v-on:click.prevent='handle2'>百度</a><!-- 阻止跳转 -->
cn.vuejs.org/v2/guide/ev…
@keyup.enter
<div id="app"> <div> 用户名:<input @keyup.enter='handle1' v-model='name'> <button @click='handle1'>点击1</button> </div> </div> <script type="text/javascript" src="js/vue.js"></script> <script type="text/javascript"> var vm = new Vue({ el:'#app', data: { name: '' }, methods: { handle1: function() { console.log(this.name); } } });
删除键 @keyup.delete
自定义按键修饰符 Vue.config.keys.f1=112
<div id="app"> <div> 用户名:<input @keyup='handle1' v-model='name'> </div> </div> <script type="text/javascript" src="js/vue.js"></script> <script type="text/javascript"> var vm = new Vue({ el:'#app', data: { name: '' }, methods: { handle1: function(event) { console.log(event.keyCode); } } }); </script>
<a v-bind:href='url'>跳转</a>
<a :href='url'>跳转</a>
双向数据绑定的三种不同形式
<input type="text" v-bind:value="msg" v-on:input="handle"> <!-- handel:function(event) { this.msg = event.target.value; } --> <input type="text" v-bind:value="msg" v-on:input="msg=$event.target.value"> <input type="text" v-model="msg">
对象
<style> .active { height: 100px; width: 150px; background-color:blueviolet; } .error { border:coral 2px solid; } </style></head> <div id="app"> <div> <div :class="{active: isActive, error: isError}"></div> <button @click="handle">点击</button> </div> </div> <script type="text/javascript" src="js/vue.js"></script> <script type="text/javascript"> var vm = new Vue({ el:'#app', data: { isActive: true, isError: true }, methods: { handle: function() { this.isActive = !this.isActive; // 使isActive的值在true flase之间跳动 this.isError = !this.isError; } } }); </script>
数组
<style> .active { height: 100px; width: 150px; background-color:blueviolet; } .error { border:coral 2px solid; } </style></head> <div id="app"> <div> <div :class="[activeClass, errorClass]"></div> <button @click="handle">点击</button> </div> </div> <script type="text/javascript" src="js/vue.js"></script> <script type="text/javascript"> var vm = new Vue({ el:'#app', data: { activeClass: 'active', errorClass: 'error' }, methods: { handle: function() { this.activeClass = '', this.errorClass = '' } } }); </script>
二者可以结合
可以简化操作
arrClasses: ['active', 'error']
arrClasses: {active: true,error: true}
默认class会保留
<div v-bind:style='{border: borderStyle, width: widthStyle, height: heightStyle}'></div>
<div id="app"> <div v-bind:style='objStyles'></div> <!-- 对象 --> <div v-bind:style='[objStyles, overrideStyles]'></div> <!-- 数组 --> <button v-on:click='handle'>切换</button> </div> <script type="text/javascript" src="js/vue.js"></script> <script type="text/javascript"> var vm = new Vue({ el: '#app', data: { borderStyle: '1px solid blue', widthStyle: '100px', heightStyle: '200px', objStyles: { border: '1px solid green', width: '200px', height: '100px' }, overrideStyles: { border: '5px solid orange', backgroundColor: 'blue' } }, methods: { handle: function(){ this.heightStyle = '100px'; this.objStyles.width = '100px'; } } }); </script>
<div v-if=' score >= 90 '>优秀</div> <div v-else-if='score<90 && score>=80'>一般</div> <div v-else>较差</div>
即使没有显示但也渲染到了页面
变化频繁选择这个
<div v-show='flag'>较差</div> <!-- flag: true -->
<div id="app"> <div>水果列表</div> <ul> <li v-for='item in fruits'>{{item}}</li> <!-- 关键字 in 属性名 --> <li v-for='(item, index) in fruits'>{{item + '---' + index}}</li> <!-- 关键字+索引 in 属性名 --> <li v-for='item in myFruits'> <span>{{item.ename}}</span> <span>{{item.cname}}</span> </li> </ul> </div> <script type="text/javascript" src="js/vue.js"></script> <script type="text/javascript"> var vm = new Vue({ el: '#app', data: { fruits: ['apple', 'banana', 'orange'], myFruits: [{ ename: 'apple', cname: '苹果' }, { ename: 'banana', cname: '香蕉' }, { ename: 'orange', cname: '橘子' },] } }); </script>
给data
里面每个对象加id
再用:key = item.id
<div id="app"> <div v-for='(v, k, i) in obj'>{{v + '---' + k + '---' + i}}</div> </div> <script type="text/javascript" src="js/vue.js"></script> <script type="text/javascript"> var vm = new Vue({ el: '#app', data: { obj: { uname: 'x52', age: '20', sex: 'male' } } });
<div v-for='(v, k, i) in obj' v-if='v == 13'>{{v + '---' + k + '---' + i}}</div>