Blogger Information
Blog 35
fans 0
comment 0
visits 16974
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
0803-VUE术语、指令
三九三伏
Original
519 people have browsed it

实例演示课堂上提及的全部指令, 并详细写出常用的术语,以及使用场景

一、vue动态修改html内容

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <script src="https://unpkg.com/vue@next"></script>
  9. <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
  10. </head>
  11. <body>
  12. <h1>Hello world</h1>
  13. <!-- {{message}}:插值,数据占位符,供Vue使用。 -->
  14. <h1 class="title">{{message}}</h1>
  15. <script>
  16. // es6
  17. // document.querySelector('.title').textContent = "es6大家好";
  18. // jQuery
  19. // $('.title').text('jQuery 大家好');
  20. // VUE,es6和jQuery的修改会破坏message,因此要使用时注释掉上面内容。
  21. const app = Vue.createApp({
  22. data(){
  23. return {
  24. message:'Vue 大家好',
  25. };
  26. },
  27. });
  28. app.mount('.title');
  29. </script>
  30. </body>
  31. </html>

二、vue术语与实例

1. 挂载点

挂载点:vue实例的作用域

只能有一个挂载点,body不能作为为挂载点。

2. vue实例

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <script src="https://unpkg.com/vue@next"></script>
  9. <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
  10. </head>
  11. <body>
  12. <div class="app">
  13. <p>{{username}}</p>
  14. </div>
  15. <script>
  16. // vue配置项
  17. const config = {
  18. data(){
  19. return {
  20. // 返回的数据
  21. username: 'vue hello',
  22. };
  23. },
  24. };
  25. // vue实例
  26. const app = Vue.createApp(config);
  27. // vue挂载
  28. app.mount('.app');
  29. </script>
  30. </body>
  31. </html>

3. 注入

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <script src="https://unpkg.com/vue@next"></script>
  9. <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
  10. </head>
  11. <body>
  12. ...
  13. <script>
  14. ...
  15. // 数据注入
  16. console.log(app.$data.username);
  17. // 可以简化如下,因为数据已经被注入到vue的实例中
  18. console.log(app.username);
  19. // 用访问器属性模拟数据注入
  20. const obj = {
  21. $data: {
  22. mail: 'mail@php.cn',
  23. },
  24. get email() {
  25. return this.$data.mail;
  26. },
  27. };
  28. console.log(obj.$data.mail);
  29. console.log(obj.email);
  30. </script>
  31. </body>
  32. </html>

4. 响应式

  1. <script>
  2. ...
  3. // 响应式
  4. app.username = "响应式修改结果";
  5. </script>

三、vue指令

本质上就是html便签的自定义属性

1.v-text

类似textContent属性

  1. <body>
  2. <div class="app">
  3. <p>用户名:<span v-text="username"></span></p>
  4. </div>
  5. <script>
  6. const app = Vue.createApp({
  7. data(){
  8. return {
  9. username: '路人甲',
  10. };
  11. },
  12. }).mount('.app');
  13. </script>
  14. </body>
  15. </html>

2. v-html

类似innerhtml属性
如果使用v-text,下面代码输出为html原样输出。

  1. <body>
  2. <div class="app">
  3. <p>用户名:<span v-text="username"></span></p>
  4. </div>
  5. <script>
  6. const app = Vue.createApp({
  7. data(){
  8. return {
  9. username: '路人甲',
  10. };
  11. },
  12. }).mount('.app');
  13. app.username = '<i style="color:red">路人乙</i>';
  14. </script>
  15. </body>


将v-text改为v-html,则可以按样式输出。

  1. <body>
  2. ...
  3. <p>用户名:<span v-html="username"></span></p>
  4. ...
  5. <script>
  6. ...
  7. app.username = '<i style="color:red">路人乙</i>';
  8. </script>
  9. </body>

3. v-bind

vue动态属性设置指令 v-bind:属性名

3.1 行内样式

  1. <body>
  2. <style>
  3. .active{
  4. color:red;
  5. }
  6. .bgc {
  7. background-color: yellow;
  8. }
  9. </style>
  10. <div class="app">
  11. <!-- <p style="color: green;">php.cn</p> -->
  12. <!-- vue动态属性设置指令 v-bind:属性名 -->
  13. <p v-bind:style="style">php.cn</p>
  14. </div>
  15. <script>
  16. const app = Vue.createApp({
  17. data(){
  18. return {
  19. style: "color:blue",
  20. };
  21. },
  22. }).mount('.app');
  23. </script>
  24. </body>

改变多个属性值时,

  1. <body>
  2. <style>
  3. ...
  4. ...
  5. <!-- vue动态属性设置指令 v-bind:属性名 -->
  6. <p v-bind:style="{color:txtcolor,backgroundColor:bgc}">php.cn</p>
  7. ...
  8. <script>
  9. const app = Vue.createApp({
  10. data(){
  11. return {
  12. txtcolor: 'blue',
  13. bgc: 'lightcoral',
  14. };
  15. },
  16. }).mount('.app');
  17. </script>
  18. </body>


以数组方式添加多个属性值

  1. ...
  2. <div class="app">
  3. <!-- <p style="color: lightcoral;">php.cn</p> -->
  4. <!-- vue动态属性设置指令 v-bind:属性名 -->
  5. <p v-bind:style="{color:txtcolor,backgroundColor:bgc}">php.cn</p>
  6. <p v-bind:style="[base,custom]">php.cn</p>
  7. </div>
  8. <script>
  9. const app = Vue.createApp({
  10. data(){
  11. return {
  12. txtcolor: 'blue',
  13. bgc: 'lightcoral',
  14. base: {
  15. border: '1px solid',
  16. background: 'lightgreen',
  17. },
  18. custom: {
  19. color: 'black',
  20. padding: '15px',
  21. },
  22. };
  23. },
  24. }).mount('.app');
  25. </script>

3.2 类样式

3.2.1 直接传字面量

  1. ...
  2. <style>
  3. .active{
  4. color:red;
  5. }
  6. .bgc {
  7. background-color: yellow;
  8. }
  9. </style>
  10. <div class="app">
  11. ...
  12. <!-- 直接传字符串 -->
  13. <p v-bind:class="'active'">路人甲</p>
  14. </div>
  15. <script>
  16. const app = Vue.createApp({
  17. ...
  18. };
  19. },
  20. }).mount('.app');
  21. </script>

3.2.2 传变量

  1. ...
  2. <style>
  3. .active{
  4. color:red;
  5. }
  6. .bgc {
  7. background-color: yellow;
  8. }
  9. </style>
  10. <div class="app">
  11. ...
  12. <!-- 传变量 -->
  13. <p v-bind:class="active">路人甲</p>
  14. </div>
  15. <script>
  16. const app = Vue.createApp({
  17. ...
  18. active: 'active',
  19. };
  20. },
  21. }).mount('.app');
  22. </script>

3.2.3 传对象字面量

  1. ...
  2. <style>
  3. .active{
  4. color:red;
  5. }
  6. .bgc {
  7. background-color: yellow;
  8. }
  9. </style>
  10. <div class="app">
  11. ...
  12. <!-- 传字面量 -->
  13. <p v-bind:class="{active: isActive}">路人甲</p>
  14. </div>
  15. <script>
  16. const app = Vue.createApp({
  17. ...
  18. active: 'active',
  19. isActive: true,
  20. };
  21. },
  22. }).mount('.app');
  23. </script>

3.2.4 多个属性设置,传入字面量

  1. <p v-bind:class="['active', 'bgc']">路人甲</p>

3.2.4 多个属性设置,传入变量

  1. <p v-bind:class="[mycolor, mybgc]">路人甲</p>
  2. const app = Vue.createApp({
  3. data(){
  4. ...
  5. mycolor: 'active',
  6. mybgc: 'bgc',
  7. ...
  8. }).mount('.app');

3.2.5 v-bind可以简写为冒号

v-bind是高频指令,可以简化为冒号 “:”

  1. <p :class="['active', 'bgc']">路人甲</p>

4 数据双向绑定

4.1 传统方法实现数据双向绑定

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <script src="https://unpkg.com/vue@next"></script>
  9. <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
  10. </head>
  11. <body>
  12. <p>
  13. <div>ES6:</div>
  14. <input type="text" oninput="this.nextElementSibling.textContent = this.value"><span></span>
  15. </p>
  16. <script>
  17. </script>
  18. </body>
  19. </html>

4.2 vue方式实现数据双向绑定

vue中event不能直接使用,要加$符号,见代码中16行。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <script src="https://unpkg.com/vue@next"></script>
  9. <!-- <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script> -->
  10. </head>
  11. <body>
  12. <!-- vue实现数据双向绑定 -->
  13. <div class="app">
  14. <p>
  15. <!-- v-on:vue的事件指令 -->
  16. <input type="text" v-on:input="comment = $event.target.value" :value="comment" />
  17. <span>{{comment}}</span>
  18. </p>
  19. </div>
  20. <script>
  21. const app = Vue.createApp({
  22. data(){
  23. return {
  24. comment: '',
  25. };
  26. },
  27. }).mount('.app');
  28. </script>
  29. </body>
  30. </html>
  31. ![](https://img.php.cn/upload/image/366/692/605/1661303448509867.png)

4.3 v-on可以简化为“@”符号

  1. <input type="text" @input="comment = $event.target.value" :value="comment" />

4.4 v-model

可以使用v-model简化v-on
原语句

  1. <input type="text" @input="comment = $event.target.value" :value="comment" />

v-model简化后

  1. <input type="text" v-model="comment" />

v-model.lazy延迟绑定

  1. <input type="text" v-model.lazy ="comment" />

效果不像之前输入一个内容回显一个内容,这样增加页面负担,延迟就是等全部输入完成,失去焦点后再回显。

Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post