Vue学习笔记(一)

1. 绑定事件按按键修饰符

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <title>绑定事件和按键修饰符</title>
</head>

<body>
<div id="app">
  {{ person }}
  <hr/>
  <button v-on:click="grow">老了一岁</button>
</div>
<script type="module">
  import { createApp, reactive } from './vue.esm-browser.js'

  createApp({
    setup() {
      const person = reactive(
        {
          name: "ivan",
          age: 36
        }
      );
      const grow = ()=>{
        person.age += 1;
        return person;
      }; 
      return {
        person,
        grow // 函数对象也是需要返回的
      };
    }
  }).mount("#app");
  
</script>
</body>

</html>

点击按键“老了一岁”,age递增1,运行结果如下:
在这里插入图片描述
2. 显示和隐藏

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>显示和隐藏</title>
</head>
<body>
    <div id="app">
        <!-- 条件渲染 -->
        {{ web }}
        <hr/>
        <button v-on:click="toggle">切换显示状态</button>
        <p v-show="web.show">This is a demo.</p>
        <hr/>
        <p v-if="web.show">This is a demo.</p>
        <hr/>
        <p v-if="web.user > 1000">This is a excellent website .</p>
        <hr/>
        <p v-else-if="web.user <= 1000">This is a new website.</p>
    </div>
    <script type="module">
        import { createApp, reactive } from "./vue.esm-browser.js"
         createApp(
            {
                setup() {
                    const web = reactive({
                        show: true,
                        user: 1000
                    });
                    const toggle = ()=> {
                        web.show = !web.show;
                    };
                    return {
                        web,
                        toggle
                    };
                }
            }
        ).mount("#app")
    </script>
</body>
</html>

点击“切换显示状态”,运行结果:
在这里插入图片描述
3. 动态属性绑定

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>动态属性绑定</title>
    <style>
        .textColor{
            color: red;
        }
    </style>
</head>
<body>
    <div id="app">
        <h3>v-bind:value="demo.com</h3>
        <input type="text" v-bind:value="web.url">
        <h3>v-bind: src="web.img"</h3>
        <img v-bind:src="web.img"/>
        <h3>v-bind: class="textColor"</h3>
        <b v-bind:class="{textColor:web.fontStatus}">demo</b>
    </div>
    <script type="module">
        import { createApp, reactive } from './vue.esm-browser.js'
        createApp( {
            setup(){
                const web = reactive(
                    {
                        url: "cxwn.demo.com",
                        img: "demo.jpg",
                        fontStatus: true
                    }
                );
                return {
                    web
                };
            }
        }
        ).mount("#app");
    </script>
</body>
</html>

运行结果:
在这里插入图片描述
4. 遍历数组和对象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>遍历数组或对象</title>
</head>
<body>
    <div id="app">
        <ul>
            <li v-if="demo.key=`hobby`">
                {{ demo.hobby[0] }}
            </li>
        </ul>
        <hr/>
        <ul>
            <li v-for="(value, key, index) of demo">
              key: {{ key }} => value: {{ value }} => {{ index }}
            </li>
        </ul>
        <hr/>
        <ul>
            <li v-for="(value, index) of demo.course" :title="value.name" :key="value.id"><!--动态属性title和key主要左右是用于提升性能-->
              index: {{ index }} => value.id: {{ value.id }} => value.name: {{ value.name }}
            </li>
        </ul>
        <hr/>
        <ul>
            <!--标签可以用来包装多个元素或者多行代码, 不会在页面中渲染-->
            <template v-for="(value, key) of demo.hobby">
                <li v-if="key == 2">
                    key: {{ key }} => value: {{ value }}
                </li>
            </template>
        </ul>
    </div>
    <script type="module">
        import { createApp, reactive } from './vue.esm-browser.js';
        createApp({
            setup() {
                const demo = reactive({
                    name: "ivan",
                    age: 20,
                    hobby: [ "basketball", "table tennis", "baseball", "swimming" ],
                    course: [
                        {
                            id: 1, 
                            name: "math",
                            score: 90
                        },
                        {
                            id: 2, 
                            name: "Chinese",
                            score: 95
                        }
                    ]
                });
                return {
                    demo
                };
            }
        }
        ).mount("#app");
    </script>
</body>
</html>

5. 双向数据绑定

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>双向数据绑定</title>
</head>
<body>
    <div id="app">
        <h2>文本框 {{ demo.text }}</h2>
        <h2>单选框 {{ demo.radio }}</h2> 
        <h2>复选框 {{ demo.checkbox }}</h2>
        <h2>记住选择 {{ demo.remember }}</h2>
        <h2>下拉列表 {{ demo.select }}</h2>
        <hr/>
        单向数据绑定: <input type="text" :value="demo.text"/>
        <hr/>
        单向数据绑定: <input type="text" v-model="demo.text"/>
        <hr/>
        <input type="radio" v-model="demo.radio" value="1"/>游泳
        <input type="radio" v-model="demo.radio" value="2"/>爬山
        <hr/>
        <input type="checkbox" v-model="demo.checkbox" value="a"/>游泳
        <input type="checkbox" v-model="demo.checkbox" value="b"/>唱歌
        <input type="checkbox" v-model="demo.checkbox" value="c"/>徒步
        <hr/>
        <input type="checkbox" v-model="demo.remember"/>记住选择
        <hr/>
        <select v-model="demo.select">
            <option value="">请选择</option>
            <option value="A">游泳</option>
            <option value="B">徒步</option>
            <option value="C">骑行</option>
        </select>
    </div>
    <script type="module">
        import { createApp, reactive } from "./vue.esm-browser.js";
        createApp({
            setup() {
                const demo = reactive({
                    text: "this is a demo.",
                    radio:"",
                    checkbox: [],
                    remember: false,
                    select: ""
                });
                return {
                    demo
                }
            }
        }).mount("#app");
    </script>
</body>
</html>

运行结果:
在这里插入图片描述
6. v-model修饰符

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>v-model修饰符</title>
</head>
<div id="app">
    URL: {{ web.url }}
    <br/>
    Users: {{ web.user }}
    <br>
    实时渲染<input type="text" v-model="web.url"/>
    <hr/>
    失去焦点或按下回车键之后开始渲染<input type="text" v-model.lazy="web.url"/>
    <hr/>
    <!--如果在数字前加其他类型,将不会发生变化-->
    输入框的值转换为数字类型<input type="text" v-model.number="web.user"/>
    <hr/>
    <!--如果在数字前加其他类型,将不会发生变化-->
    删除首尾空白字符串<input type="text" v-model.trim="web.url"/>
</div>
<body>
    <script type="module">
        import { createApp,reactive } from "./vue.esm-browser.js";
        createApp({
            setup() {
              const web = reactive({
                url: "www.baidu.com",
                user: 0
              });
              return {
                web
              };
            }
        }).mount("#app");
    </script>
</body>
</html>

运行结果:
在这里插入图片描述
7. 渲染数据v-text和v-html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>渲染数据v-text和v-html</title>
</head>
<body>
    <div id="app">
        <h3> {{ web.title }} </h3>
        <h3 v-text="web.title"></h3>
        <h3 v-html="web.url"></h3>
    </div>
    <script type="module">
        import { createApp, reactive } from './vue.esm-browser.js';
        createApp({
            setup(){
                const web = reactive({
                    title: "This is a dmeo",
                    url: "<i style='color:blue;'>www.baidu.com</i>"
                });
                return {
                    web
                };
            }
        }).mount("#app");
    </script>
</body>
</html>

运行结果:
在这里插入图片描述
8. computed计算属性

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>computed计算属性</title>
</head>

<body>
    <div id="app">
        <h3> add: {{ add() }} </h3>
        <h3> add: {{ add() }} </h3>
        <h3> sum: {{ sum }} </h3>
        <h3> sum: {{ sum }} </h3>
        <hr/>
        x: <input type="text" v-model.number="data.x"/>
        <br/>
        y: <input type="text" v-model.number="data.y"/>
    </div>
    <script type="module">
        import { createApp, reactive, computed } from './vue.esm-browser.js';
        createApp({
            setup() {
                const data = reactive({
                    x: 10,
                    y: 20
                });
                let add = () => {
                    console.log("add");
                    return data.x + data.y;
                };
                const sum = computed(() => {
                    console.log("sum");
                    return data.x - data.y;
                }
                );
                return {
                    data,
                    add,
                    sum
                };
            }
        }).mount("#app");
    </script>
</body>

</html>

运行结果:
在这里插入图片描述

相关推荐

  1. Vue笔记)基础

    2024-04-14 02:20:05       42 阅读
  2. vue前端学习笔记

    2024-04-14 02:20:05       41 阅读
  3. vue学习笔记

    2024-04-14 02:20:05       27 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-14 02:20:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-14 02:20:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-14 02:20:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-14 02:20:05       18 阅读

热门阅读

  1. 爬虫ip被限制了怎么解决

    2024-04-14 02:20:05       13 阅读
  2. MVC设计模式的思想

    2024-04-14 02:20:05       14 阅读
  3. Unity3D 立方体纹理与自制天空盒详解

    2024-04-14 02:20:05       15 阅读
  4. Go语言中工作负载类型对并发的影响

    2024-04-14 02:20:05       13 阅读
  5. 分库分表-简单了解

    2024-04-14 02:20:05       12 阅读
  6. 电子邮件协议学习

    2024-04-14 02:20:05       11 阅读
  7. Unity DOTS1.0 入门(1) ECS机制与概述

    2024-04-14 02:20:05       16 阅读
  8. 网络工程师练习题(13)

    2024-04-14 02:20:05       13 阅读
  9. Redis GEO实现附近的人功能

    2024-04-14 02:20:05       16 阅读
  10. MySQL基础练习题:习题31-End

    2024-04-14 02:20:05       13 阅读
  11. 服务器停用,备份服务文件。

    2024-04-14 02:20:05       10 阅读
  12. Gitea的简单介绍

    2024-04-14 02:20:05       13 阅读