zoukankan      html  css  js  c++  java
  • Vue学习笔记(一)

    Vue(渐进式JavaScript框架)概述

    Vue是一套用于构建用户界面的渐进式框架。

    Vue的数据渲染

    • 第一步:引入Vue文件
      1. CMD进入当前工程的文件夹
      2. npm init -y 生成package.json文件
      3. npm i vue 加载Vue包
      4. 在HTML文件中引用Vue.js
      <script src="node_modules/vue/dist/vue.min.js"></script>
      
    • 第二步:创建一个vue实例(对象),这个实例用来管理html代码
      var vm = new Vue();
      
    • 第三步:对象中的el属性,用来指定需要管理的范围,值需要一个标签的id
      var vm = new Vue({
          el:"#root",
      })
      
    • 第四步:对象中的data属性,用来保存页面需要用到的数据
      var vm = new Vue({
          el:"#root",
          data:{
              msg:"Hello"
          }
      })
      
    • 第五步:将data中的数据绑定到页面上,在{{}}中写data的属性名即可
      <div id="root">
          <p>{{ msg }} vue !!</p>
      </div>
      <!-- 不在vue的管辖范围内,不会渲染数据 -->
      <p>{{ msg }} vue !!</p>
      

    Vue的插值表达式

    <!-- 不多bb 是什么玩意自己领会 -->
    <div id="app">
        <h1>{{ userName }}</h1>
        <h1>{{ userName + "搬家"}}</h1>
        <h1>{{ age + 1 }}</h1>
        <h1>{{ age > 18 ? "成年" : "未成年" }}</h1>
        <h1>{{ userName.split("").reverse().join("") }}</h1>
    </div>
    
    <script>
        var vm = new Vue({
            el:"#app",
            data:{
                userName:"xxx",
                age:18,
            }
        })
    </script>
    

    Vue的基础指令

    v-text

    • v-text的值可以设置表达式,与差值表达式相同
    • v-text会替换掉标签的内容
    <div id="app">
    
        <!-- 这个显示的是小明 -->
        <h1 v-text="userName"></h1> 
    
        <!-- 这个显示的也是小明 -->
        <h1 v-text="userName">~~~~~~~~~~</h1>
    
        <!-- 使用v-text不会让浏览器渲染标签 -->
        <div v-text="htmlStr"></div>
    </div>
    <script>
        var vm = new Vue({
            el: "#app",
            data: {
                userName:"小明"
                htmlStr:"<h2>吵架</h>"
            }
        })
    </script>
    

    v-html

    • v-html可以在HTML页面上渲染标签
    • 但是v-html使用不安全,一般很少用
    <div id="app">
        <!-- 这里显示的是h2标签的 “吵架” -->
       <div v-html="htmlStr"></div>
    </div>
    
    <script>
        var vm = new Vue({
            el: "#app",
            data: {
                htmlStr:"<h2>吵架</h>"
            }
        })
    </script>
    
    

    v-bind

    • v-bind 可以给标签动态绑定属性
        <div id="app">
    
            <!-- 给img标签添加src地址 -->
            <img v-bind:src="imgSrc" alt="">
            <!-- 简写 -->
            <img :src="imgSrc" alt="">
    
            <!-- 给a标签添加href地址 -->
            <a :href="theHref">Vue官网</a>
            <!-- a标签地址的字符串拼接 -->
            <a :href="'delete.php?id=' + theId">删除</a>
    
            <!-- ES6的模板字符串 这样写也行 -->
            <a :href="'delete.php?id=${theId}'">删除</a>
    
            <!-- {red:flag} red是类名 flag为true时该标签设置这个类名 -->
            <p :class="{red:flag}">中午吃啥</p>
            <p :class="{red:age == 18}">中午吃啥</p>
    
        </div>
    
        <script>
            var vm = new Vue({
                el:"#app",
                data:{
                    imgSrc:"https://cn.vuejs.org/images/logo.png",
                    theId:111,
                    theHref:"https://cn.vuejs.org/v2/api/#v-text",
                    flag:true,
                    age:1
                }
            })
        </script>
    

    v-for

    • v-for 遍历数组、json元素用
        <div id="app">
            <ul>
                <!-- item 数组中的每一项 list data中的数组 -->
                <li v-for="item in list" :key="item.id">{{ item.id }}:{{ item.name }}</li>
            </ul>
    
            <ul>
                 <!-- item 数组中的每一项 index数组的下标 -->
                <li v-for="(item,index) in list" :key="index">
                    {{ index }} : {{ item.name }}
                </li>
            </ul>
    
            <ul>    
                <li v-for="value in user" :key="value">
                    {{ value }}
                </li>
            </ul>
    
            <ul>
                <li v-for="(value,key,index) in user">
                    {{ key }} : {{ value }} ------- {{ index }}
                </li>
            </ul>
        </div>
    
        <script>
            var vm = new Vue({
                el:"#app",
                data:{              
                    list:[
                        {id:1,name:"xxx"},
                        {id:2,name:"zzz"},
                        {id:3,name:"ccc"}
                    ],
                    user:{name:"vvv",age:20}
                }
            })
        </script>
    

    v-model

    • v-model 可实现数据双向绑定,这个指令只能给input、textarea、select使用
    <div id="app">
        <input type="text" v-model="msg" >
        <input type="text" :value="msg" >
        <h1>{{ msg }}</h1>
    </div>
    
    <script>
        var vm = new Vue({
            el:"#app",
            data:{
                msg:"Hello Vue"
            }
        })
    </script>
    

    v-on

    • v-on 绑定事件
    
    <!-- 点击事件绑定 -->
    <div v-on:click="changeName">点击改变name</div>
    <!-- 这个是简写 -->
    <button @click="changeName">点击改变name</button>
    
    
    <!-- 函数传参 -->
    <button @click="abc('ccc')">传参</button>
    
    <!-- 获取时间对象 -->
    <button @click="getEvent($event)">获取事件对象</button>
    
    <!-- 事件修饰符-阻止默认事件 -->
    <a href="http://www.baidu.com" @click.prevent="baidu">百度一下</a>
    
    <!-- 按键修饰符 -->
    <!-- 按回车键响应 -->
    <input type="text" v-model="name" @keyDown.enter="submit">
    <!-- 按65号键响应 -->
    <input type="text" v-model="name" @keyDown.65="submit">
    
    
    <!-- methods中的点击事件中的this 指的是 新建的Vue对象 -->
    <script>
        var vm = new Vue({
            el:"#app",
            data:{
                name:"xxxx"
            },
            methods: {
                changeName(){
                    console.log(this === vm);
                    this.name = "zzz";
                },
                abc(newName) {
                    this.name = newName;
                },
                getEvent(e) {
                    console.log(e);
                },
                baidu() {
                    console.log("百度一下");
                },
                submit() {
                    alert("点击回车");
                }
            },
        })
    </script>
    

    v-if

    • v-if 根据条件创建标签
    <div id="app">
    <!-- 只显示第一个p标签 -->
        <p v-if="age >= 18">已成年</p>
        <p v-if="age < 18">未成年</p>
    </div>
    
    <script>
        var vm = new Vue({
            el:"#app",
            data:{              
                age:18,
            }
        })
    </script>
    

    v-show

    • v-show 标签全部创建 但是根据条件显示
    <div id="app">
    <!-- 标签都创建,只显示第一个p标签,第二个隐藏display -->
        <p v-show="age >= 18">已成年</p>
        <p v-show="age < 18">未成年</p>
    </div>
    
    <script>
        var vm = new Vue({
            el:"#app",
            data:{              
                age:18,
            }
        })
    </script>
    
  • 相关阅读:
    Oracle.EntityFrameworkCore使用时报错:Specified cast is not valid
    .net core webapi通过中间件获取请求和响应内容
    金额数字语音播报
    FluentData微型ORM
    记阿里巴巴数据采集
    给定一个N阶矩阵A,输出A的M次幂(M是非负整数)(Java)
    求出区间[a,b]中所有整数的质因数分解。(Java)(转载)
    最大公约数 最小公倍数(Java)
    十六进制转八进制(Java)
    杨辉三角形(java)
  • 原文地址:https://www.cnblogs.com/lzb1234/p/11192896.html
Copyright © 2011-2022 走看看