vue基础

 

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 
  4 <head>
  5     <meta charset="UTF-8">
  6     <meta name="viewport" content="width=<device-width>, initial-scale=1.0">
  7     <title>Document</title>
  8     <style>
  9         .active {
 10             color: rgba(0, 110, 255, 0.712)
 11         }
 12 
 13         .delete {
 14             background: rgba(255, 166, 0, 0.842);
 15         }
 16 
 17         .error {
 18             font-size: 34px;
 19         }
 20 
 21         .seen {
 22             width: 100px;
 23             height: 100px;
 24             background: red;
 25         }
 26     </style>
 27 </head>
 28 
 29 <body>
 30     <div id="app">
 31         <!-- {{}} 用于标签体内显示数据 -->
 32         <h1>{{message}}</h1>
 33 
 34         <!-- v-once 一次性插值 -->
 35         <p v-once>{{message}}</p>
 36 
 37         <!-- 表达式 -->
 38         <p v-once>{{num+1}}</p>
 39 
 40         <!-- v-model进行数据的双向绑定 -->
 41         <input type="text" v-model="message">
 42 
 43         <!-- 双大括号将数据以普通文本方式进行输出 -->
 44         <p>普通文本输出:{{htmls}}</p>
 45         <!-- 输出真正的html指令 v-html -->
 46         <!-- v-html:
 47             1.如果输出的内容是html数据,双大括号将数据以普通文本方式进行输出
 48             为了输出真正html的效果,就需要使用v-html指定
 49             2.为了防止XSS攻击(不会识别js)
 50          -->
 51         <p>html渲染输出:<span v-html="htmls"></span></p>
 52 
 53         <!-- 元素绑定指令  -->
 54         <img v-bind:src="imgUrl"><br>
 55         <img :src="imgUrl"><br>
 56         <a :href="xurl">跳转到百度</a><br>
 57 
 58 
 59         <!-- 点击按钮,调用函数 -->
 60         <button @click="reduce">-</button>
 61         <input type='text' v-model="nums">
 62         <button @click="plus">+</button><br>
 63         <p></p>
 64 
 65         <!-- 
 66             1.函数没有缓存,每次都会被调用
 67             2.计算属性有缓存,只有当计算属性体内的属性值被更改之后才会被调用,不然不会被调用
 68             3.函数只支持单向
 69             4.计算属性默认情况下,只有getter函数,而没有setter函数,所以只支持单向
 70             如果需要双向绑定,则需要自定义setter函数
 71          -->
 72         <!-- 函数 -->
 73         数学:<input type="text" v-model="mathematics"><br>
 74         英语:<input type="text" v-model="english"><br>
 75         总得分(函数)-单向绑定:<input type="text" v-model="sum()"><br>
 76 
 77         <!-- 绑定计算属性后面不加小括号 -->
 78         总得分(计算属性)-单向绑定:<input type="text" v-model="sum1"><br>
 79         总得分(计算属性)-双向绑定:<input type="text" v-model="sum2"><br>
 80 
 81         <!-- 监听 -->
 82         总得分(监听数学属性)-通过watch选项监听:<input type="text" v-model="sum3"><br>
 83         总得分(监听英语属性)-通过vm实例调用:<input type="text" v-model="sum4"><br>
 84         <!-- <button @click="sum">计算</button> -->
 85 
 86         <!-- class 列表样式数据绑定 -->
 87         <div>
 88             <h3>class 绑定 v-bind:class 或 :class</h3>
 89             <p class="active">固定绑定class</p>
 90             <p>动态绑定class</p>
 91             <p v-bind:class="activeclass">字符串表达式</p>
 92             <p :class="{delete:isDelete,active:isActive}">对象表达式</p>
 93             <p :class="['delete','active','error']">数组表达式</p>
 94 
 95             <h3>Style绑定,v-bind:style或者:style</h3>
 96             <p :style="{color:activeColor,fontSize:fonrSize+'px'}">Style绑定</p>
 97         </div>
 98 
 99 
100         <!-- 
101             v-if 如果初始值为假,则什么也不做,条件为真,都会重新渲染
102             v-show 不是初始值条件是什么,都会重新渲染
103             如果非常频繁的切换,则使用v-show,运行后条件很少改变,则使用v-if较好
104          -->
105         <div>
106             <h3>v-if 条件渲染</h3>
107             <input v-model="state" type="checkbox">勾选显示红色方块
108             <p v-if="state" class="seen"></p>
109             <p v-else="state">隐藏内容</p>
110 
111             <h3>v-show 条件渲染</h3>
112             <p v-show="state" class="seen"></p>
113         </div>
114 
115 
116         <!-- 迭代数组 -->
117         <div>
118             <h3>迭代数组</h3>
119             <ul>
120                 <!-- e为数组别名,index为下标,下标从0开始, 
121                     注意:使用key特殊属性,它会基于key的变化重新排列元素顺序,并且会移除key不存在的数据
122                     可以使用of或者in作为分隔符
123                  -->
124                 <li v-for="(e,index) in emps" :key="id">
125                     ID: {{e.id}},name:{{e.name}},age:{{e.age}}
126                 </li>
127             </ul>
128         </div>
129 
130         <!-- 迭代对象 -->
131         <div>
132             <h3>迭代对象</h3>
133             <ul>
134                 <!-- value为属性值,key为属性名,index为下标 -->
135                 <li v-for="(value,key,index) in prece">
136                     第{{index+1}}个对象:{{key}}={{value}}
137                 </li>
138             </ul>
139 
140         </div>
141 
142         <!-- 事件处理函数 v-on -->
143         <div>
144             <h3>事件处理函数 v-on</h3>
145 
146             <button v-on:click="deletes">删除 {{tips}}</button>
147             <!-- $event代表的是原生的Dom事件 -->
148             <button @click="warn(tipss,$event)">Warn</button>
149 
150         </div>
151 
152         <!-- 事件修饰符
153             .stop - 阻止冒泡
154             .prevent - 阻止默认事件
155             .capture - 阻止捕获
156             .self - 只监听触发该元素的事件
157             .once - 只触发一次
158             .left - 左键事件
159             .right - 右键事件
160             .middle - 中间滚轮事件
161          -->
162         <div>
163             <h3>事件修饰符
164                 .stop - 阻止冒泡
165                 .prevent - 阻止默认事件
166                 .capture - 阻止捕获
167                 .self - 只监听触发该元素的事件
168                 .once - 只触发一次
169                 .left - 左键事件
170                 .right - 右键事件
171                 .middle - 中间滚轮事件
172             </h3>
173             <!-- 只触发一次 -->
174             <button @click.once="doThis">只触发一次:{{numm}}</button>
175             <div @click="todo1">
176                 <button @click="todo">todo</button>
177             </div>
178             <!-- 阻止冒泡  -->
179             <div @click="todo1">
180                 <button @click.stop="todo">阻止冒泡</button>
181             </div>
182             <!--  .prevent - 阻止默认事件 -->
183             <a href="http:www.baidu.com" @click.prevent="onSubmit">跳转百度</a>
184         </div>
185         <!-- 按键修饰符
186             .enter .tab .delete (捕获 "删除" 和 "退格" 键) .esc .space .up .down .left .right .ctrl .alt .shift .meta
187         -->
188         <div>
189             <h3>按键修饰符
190                 .enter .tab .delete (捕获 "删除" 和 "退格" 键) .esc .space .up .down .left .right .ctrl .alt .shift .meta</h3>
191             <input type="text" value="enter" @keyup.enter="keyEnter">
192             <input type="text" value="delete" @keyup.delete="keyDelete">
193         </div>
194 
195         <!-- 表单数据双向绑定 v-model -->
196         <div>
197             <h3>表单数据双向绑定 v-model</h3>
198             <form @submit.prevent="submitForm">
199                 姓名:<input type="text" v-model="name">
200                 <br><br>
201                 性别(单选):
202                 <input type="radio" name="sex" value="0" v-model="sex">203                 <input type="radio" name="sex" value="1" v-model="sex">204                 <br><br>
205                 科目(多选):
206                 <input type="checkbox" name="skills" value="java" v-model="skills">java
207                 <input type="checkbox" name="skills" value="python" v-model="skills">python
208                 <input type="checkbox" name="skills" value="vue" v-model="skills">vue
209                 <br><br>
210                 城市(下拉框):
211                 <select name="city" v-model="citys">
212                     <option v-for="c in city" :value="c.code">{{c.name}}</option>
213 
214                 </select>
215                 <br><br>
216                 备注(多行文本):
217                 <textarea cols="30" rows="5" v-model="disc"></textarea>
218                 <br><br>
219                 <button type="submit">提交</button>
220             </form>
221 
222         </div>
223 
224     </div>
225     <script src="./node_modules/vue/dist/vue.js"></script>
226     <script>
227         var vm = new Vue({
228             el: '#app',//指定被Vue管理的入口,值为选择器
229 
230             // 初始化的数据
231             data: {//用于初始化数据,在vuevm=实例管理的Dom节点下,可通过模板请求来引用
232                 message: 'hello word!',
233                 num: 10,
234                 htmls: `<span style="color: red ">你好</span>
235                 <script src="./node_modules/vue/dist/vue.js"><\/script>`,
236                 imgUrl: 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png',
237                 xurl: 'http://www.baidu.com',
238                 nums: 0,
239                 mathematics: 80,
240                 english: 90,
241                 sumnum: '',
242                 sum3: 0,
243                 sum4: 0,
244                 activeclass: 'active',
245                 activeColor: 'red',
246                 isDelete: true,
247                 isActive: false,
248                 fonrSize: 32,
249                 state: true,
250                 emps: [
251                     { id: '1', name: "张三", age: '16' },
252                     { id: '2', name: "李四", age: '18' },
253                     { id: '3', name: "王五", age: '20' },
254                 ],
255                 prece: {
256                     name: '张三',
257                     age: 18
258                 },
259                 tips: "确定是否删除",
260                 tipss: "警告",
261                 numm: 0,
262                 skills: [],
263                 city: [
264                     { code: 'bj', name: '北京' },
265                     { code: 'sh', name: '上海' },
266                     { code: 'gz', name: '广州' }
267                 ],
268                 citys: "sh",
269                 disc: "",
270                 sex: '1',
271                 submitForm: function () {
272                     alert(this.name + ',' + this.sex + ',' + this.skills + ',' + this.citys + ',' + this.disc)
273                 }
274 
275             },
276             // methods里可定义多个函数
277             methods: {
278                 // 函数每次都会执行函数体进行计算
279                 //递增函数
280                 plus: function () {
281                     console.log("调用plus")
282                     this.nums = this.nums + 1
283                 },
284                 //递减函数
285                 reduce: function () {
286                     console.log("调用reduce")
287                     if (this.nums > 0) {
288                         this.nums = this.nums - 1
289                     }
290 
291                 },
292                 //求和
293                 sum: function () {
294                     console.log("调用sum函数")
295                     // 减0是为了防止字符串转为数字运算
296                     return (this.mathematics - 0) + (this.english - 0)
297                 },
298                 deletes: function (event) {
299                     // event代表的是Dom原生事件,Vue.js它会自动的将它传入进来
300                     // 弹窗显示tips的内容
301                     alert(this.tips)
302                     //弹窗显示Dom原生事件的内容
303                     alert(event.target.innerHTML)
304 
305                 },
306                 warn: function (name, event) {
307                     // 如果说函数有多个参数,而需要使用原生事件,则需要使用$event作为参数传入
308                     alert(name + '' + event.target.tagName)
309                 },
310                 doThis: function () {
311                     this.numm++
312                 },
313                 todo: function () {
314                     alert("todo......")
315                 },
316                 todo1: function () {
317                     alert("todo1......")
318                 },
319                 onSubmit: function () {
320                     alert("跳转被阻止")
321                 },
322                 keyEnter: function () {
323                     alert("按了Enter键")
324                 },
325                 keyDelete: function () {
326                     alert("Delete")
327                 }
328             },
329             // 计算属性 ,会进行缓存,只在相关响应式依赖发生改变时,它们才会重新求值
330             computed: {
331                 sum1: function () {
332                     console.log("调用sum1函数")
333                     return (this.mathematics - 0) + (this.english - 0)
334                 },
335                 sum2: {
336                     // 获取数据
337                     get: function () {
338                         console.log("调用get")
339                         return (this.mathematics - 0) + (this.english - 0)
340                     },
341                     // 设置数据
342                     set: function (newvalue) {
343                         console.log("调用set")
344                         var avg = newvalue / 2
345                         this.mathematics = avg
346                         this.english = avg
347                     }
348                 }
349 
350             },
351             // 监听
352             watch: {
353                 mathematics: function (newValue, oldValue) {
354                     // newValue是新的值
355                     console.log("调用watch监听")
356                     this.sum3 = (newValue - 0) + (this.english - 0)
357                 }
358 
359             },
360         })
361         // 第一个参数是被监听的属性名,第二个是回调函数
362         vm.$watch('english', function (newvalue) {
363             console.log("调用$watch()监听")
364             this.sum4 = (newvalue - 0) + (this.mathematics - 0)
365         })
366         vm.$watch('sum4', function (newvalue) {
367             console.log("监控sum4")
368             var avgs = newvalue / 2
369             this.mathematics = avgs
370             this.english = avgs
371         })
372     </script>
373 </body>
374 
375 </html>

 

posted @ 2021-04-07 14:05  沫笙*  阅读(68)  评论(0编辑  收藏  举报