Vue表单、计算属性computed、vue深浅监听、vue组件的简单使用

本文详细介绍了Vue.js的基础知识,包括如何使用v-model进行表单数据绑定,实现即时更新、延迟更新、格式化输入及多选处理。接着讲解了计算属性的使用,通过计算属性实现简单的加法运算。然后讨论了监听器,展示了如何监听数据变化并作出响应。最后,探讨了Vue组件的概念,通过创建和注册组件实现了代码的复用。
摘要由CSDN通过智能技术生成

目录

Vue表单

 Vue计算属性

Vue 监听

Vue深度监听

Vue组件


Vue表单

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vue的数据模型</title>
    <script src="../js/vue.js"></script>
  </head>
  <body>
    <!-- 容器 -->
    <div id="app">
      {{msg}} {{form}}
      <hr />

      <!--vue使用v-model进行数据绑定  如果有这些,则忽略value、checked、selected等等默认的值 ,则就是下面的value="你好"-->
      <!-- 即时跟新 -->
      <!-- 用户名:<input type="text" v-model="form.username" value="你好" /> -->
      <!-- lazy修饰符作用,失去焦点才跟新 -->
      用户名:<input type="text" v-model.lazy="form.username" value="你好" />

      <br />
      <!-- 即时更新 -->
      <!-- 年龄:<input type="text" v-model="form.age" /> -->
      <!-- 不完整规则校验number -->
      <!-- 年龄:<input type="number" v-model.number="form.age" /> -->
      <!-- 去掉两端空格trim ,无论两端多长空格后有数据,都只显示一个空格 -->
      年龄:<input type="text" v-model.trim="form.age" />

      <br />
      <!-- 选什么传递什么,互斥事件 -->
      性别:<input type="radio" value="male" v-model="form.gender" />男
      <input type="radio" value="female" v-model="form.gender" />女
      <br />
      爱好:<input type="checkbox" value="篮球" v-model="form.hobby" />篮球
      <input type="checkbox" value="足球" v-model="form.hobby" />足球
      <input type="checkbox" value="游泳" v-model="form.hobby" />游泳
      <input type="checkbox" value="跳舞" v-model="form.hobby" />跳舞
      <br />
      城市:
      <select v-model="form.city">
        <option value="南京">南京</option>
        <option value="西安">西安</option>
        <option value="北京">北京</option>
        <option value="上海">上海</option>
      </select>
    </div>

    <script>
      // 整个页面只能有一个Vue实例对象
      let vm = new Vue({
        el: "#app",
        data: {
          msg: "hello",
          form: {
            username: "不好",
            gender: "male",
            //多选框必须加一个数组框 []:即声明为空数组
            hobby: [],
            //hobby: ["篮球"], //默认选中
            city: "上海", //默认选中
          },
        },
        methods: {},
      });
    </script>
  </body>
</html>

 Vue计算属性

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vue的数据模型</title>
    <script src="../js/vue.js"></script>
  </head>
  <body>
    <!-- 容器 -->
    <div id="app">
        {{msg}}
        <hr>
        a: <input type="number" v-model.number="a"></input>
    <br>
    +
    <br>
        b:<input type="number" v-model.number="b"></input>
    <br>
    =
    <br>
        <div style="border: 1px solid red; width: 50px;height: 30px;">{{total}}</div>

    </div>

    <script>
    
      // 整个页面只能有一个Vue实例对象
      let vm = new Vue({
        el: "#app",
        data: {
          msg: "hello",
          a:'',
          b:'',
        },
        methods: {},
        //计算属性
        computed:{
            total(){
                return this.a+this.b;
            }
        }
      });
    </script>
  </body>
</html>

Vue 监听

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vue的数据模型</title>
    <script src="../js/vue.js"></script>
  </head>
  <body>
    <!-- 容器 -->
    <div id="app">
        {{msg}}
        <hr>
        a: <input type="number" v-model.number="a"></input>
    <br>
    +
    <br>
        b:<input type="number" v-model.number="b"></input>
    <br>
    =
    <br>
        <div style="border: 1px solid red; width: 50px;height: 30px;">{{total}}</div>

    </div>

    <script>
    
      // 整个页面只能有一个Vue实例对象
      let vm = new Vue({
        el: "#app",
        data: {
          msg: "hello",
          a:'',
          b:'',
          total:''
        },
        methods: {},
        watch:{
            a(newValue,oldValue){
                console.log(newValue,oldValue);
                this.total=newValue+this.b;
            },
            b(newValue,oldValue){
                console.log(newValue,oldValue);
                this.total=newValue+this.a;
            }
        }
      });
    </script>
  </body>
</html>

  

Vue深度监听

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vue的数据模型</title>
    <script src="../js/vue.js"></script>
  </head>
  <body>
    <!-- 容器 -->
    <div id="app">
      {{msg}} {{obj}}
      <br />
      <button @click="changeObj">更改obj数据</button>
    </div>

    <script>
      // 整个页面只能有一个Vue实例对象
      let vm = new Vue({
        el: "#app",
        data: {
          msg: "hello",
          obj: {
            name: "张三",
            age: "24",
          },
        },
        methods: {
          changeObj() {
            this.msg = "123";
            this.obj.name = "lisi";

            //因为obj对象是复杂数据类型,只能是浅监听监听不到
            //需要进行解构才能监听到
            // this.obj = {
            //   ...this.obj,
            //   name: "lisi",
            // };
          },
        },
        watch: {
          msg(newValue, oldValue) {
            console.log("msg数据发生变化");
          },
          //浅监听
          //   obj(newValue, oldValue) {
          //     console.log("obj数值发生变化");
          //   },

          //对于复杂数据类型,内部属性的改变,普通监听监听不到,如果要监听,使用深度监听
          //应用数据类型的监听(浅度监听),这是监听引用地址有没有变化
          //引用数据类型深度监听,内部属性发生变化时,才能监听到
          //深度监听
          obj: {
            handler(newValue, oldValue) {
              console.log("深度监听,obj数据发生改变");
            },
            deep: true,
          },
        },
      });
    </script>
  </body>
</html>

Vue组件

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vue的数据模型</title>
    <script src="../js/vue.js"></script>
  </head>
  <body>
    <!-- 容器 -->
    <div id="app">
      {{msg}}
      <!-- 重复代码片段的复用:组件的封装:就是把这片重复的代码片段封装起来 -->
      <!-- <div>
        <span></span>
        <div></div>
      </div> -->
      <my-com></my-com>
      <hr />
      <my-com></my-com>

      <!-- <div @click="const++">按钮{{comMsg}}</div> -->
      <!-- <div>按钮{{comMsg}}</div> -->
    </div>

    <script>
      //1.创建组件  组件声明  对象
      let myCom = {
        //组件的配置信息
        data() {
          return {
            comMsg: "组件内的msg",
            const: 1,
          };
        },
        methods: {},
        template: `
        <div>
            <span>hello Vue</span>
            <div>Hello Vue</div>
            <div>按钮{{comMsg}}</div>
        </div>
        `,
      };

      //2.组件注册
      //全局注册
      Vue.component("my-com", myCom);

      // 整个页面只能有一个Vue实例对象
      let vm = new Vue({
        el: "#app",
        //局部注册组件
        /* components: {
          "my-com": myCom,
        }, */
        data: {
          msg: "hello",
        },
        methods: {},
      });
    </script>
  </body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值