初识vue

一、vue原始代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <!--根组件的模板-->
    <div id="app">
        <!-- 插值表达式(小胡子写法) 在小胡子中就可以使用vm中的数据了 -->
        <h1>{{ msg }}</h1>
    </div>

    <script src="../js/vue-development.js"></script>
    <script>
        // vm是Vue对象  根组件   vue中基本上很少操作DOM   JQ中需要大量的操作DOM
        let vm = new Vue({
            el:"#app", // el给根组件指定模板
            data(){   // data选项 data是用来给模板提供数据  data需要返回一个对象
                return {   // data中需要返回一个对象  数据就放到此对象中
                    msg:"大家一起玩vue~"  // msg是数据  数据以后,叫状态
                }
            }
        });
    </script>
</body>
</html>

vue的双向数据绑定(v-model)

<body>
    <div id="app">
        <h2>{{ msg }}</h2>
        <!-- 在模板中的标签中,可以添加很多自定义属性 -->
        <!-- vue中发明了一些自定义属性,通常是以v-打头,这些自定义属性有一个别名,叫指令  -->
        <!-- 不同的指令有不同的作用,v-model的作用就是为了实现双向数据绑定 -->
        <!-- 一向:把M中的数据绑定模板上 在input上,绑定到vlaue上的,当M中的数据改变了,V会自动刷新-->
        <!-- 另一向:当V中的改变了状态,M中的数据也会更新-->
        <input type="text" v-model="msg">
    </div>
    <script src="../js/vue-development.js"></script>
    <script>
        // 如何让M中的数据改变?
        // 答:可以使用vm.msg = "xxx"  vm代理data中的所有数据
        let vm = new Vue({
            el:"#app",
            data(){
                return{
                    msg:"hello vue"
                }
            }
        })
    </script>
</body>

插值表达式(小胡子语法)

    就叫它小胡子语法,说白了,就是 {{ }}  在{{ }}中可以放data中的数据
    在{{ }}中可以对数据进行简单地运算,在小胡子,只能放表达式(任何有值的内容都是表达式)
    小胡子中,只能放data中定义好的数据
    小胡子中,可以放三元运算符
    小胡子中,还可以去调用一个函数
    小胡子中,不能放语句

数据单向绑定:

    把数据作为文本结点:
        方式一:通过小胡子就可以把M中的数据绑定到V上的。 小胡子就是v-text的语法糖
        方式二:v-text也可以绑定数据到标签中,用的不多   v-text是一个指令  在vue中指令都是以v-打头
            v-text指令绑定数据时,数据如果是一片html代码,v-text并不会解析
        方式三:v-html  用的时候的要慎重 ???  基本上也用不到
            也可以把data中的数据绑定到模板上的,如果是数据是是一片html代码,v-html会解析
    把数据作为属性结点:
        v-bind: 可以把data中的数据,绑定到模板中的属性上,作为属性节点
        作用:v-bind:id="item"
        v-bind可以简写:  :id="item"

style绑定:

只需要记住
   1):style后面绑定一个对象
   2)css属性如果是中划线,需要变成小驼峰
       <body>
    <div id="app">
        <div style="width: 100px; height: 100px; background: red;"></div>
        <div v-bind:style="{width:w, height:h, background:c}"></div>
        <h1 v-bind:style="{fontSize:fs}">{{ msg }}</h1>
    </div>
    <script src="../../js/vue-development.js"></script>
    <script>
        let vm = new Vue({
            el:"#app",
            data(){
                return {
                    msg:"大家一起玩转vue~",
                    w:"110px",
                    h:"110px",
                    c:"yellow",
                    fs:"50px"
                }
            }
        });
    </script>
</body>

class绑定:

写法1::class="o"   o是data中的数据(状态)  目的:状态在后面可以动态发生改变
写法2:控制一个类没或者没有 class后面绑定一个三元运算符,控制此标签有没有这个类
写法3:一个标签可以绑定多个类  :class后面跟上一个对象  :class="{box:flag,box3:flag2}"
写法4:在:class后面跟一个数组 <p :class="['box','box3']">vue</p>

总结:

1):class 后面跟一个data中的状态 <div :class="o"></div>
2):class 后面可以跟一个三目运算符   <p :class="flag ? 'box3': ''">{{ msg }}</p>
3):class 后面可以跟一个对象  是对象,意味着,我要绑定多个css类
4):class 后面可以跟一个数组  是数组,意味着,我要绑定多个css类, 数组中也可以状态
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .box{
            width: 100px;
            height: 100px;
            background-color: skyblue;
        }
        .box2{
            width: 200px;
            height: 200px;
            background-color: gold;
        }
        .box3{
            font-size: 40px;
            color: red;
        }
    </style>
</head>
<body>
    <div id="app">
        <!--直接给div加上一个box类 如果这样写,class后面的box是写死的-->
        <div class="box"></div>

        <!-- class绑定的数据也需要是一个状态 -->
        <div v-bind:class="o"></div>

        <!-- class后面绑定一个三元运算符,控制此标签有没有这个类 -->
        <p :class="flag ? 'box3': ''">{{ msg }}</p>

        <!--一个标签上面绑定多个类-->
        <!--直接在p标签上绑定了两个类,也是写死的-->
        <p class="box box3">hello</p>
        <p :class="{box:flag,box3:flag2}">hello</p>

        <!--在:class后面跟一个数组  []中放的是css类-->
        <p :class="['box','box3']">vue</p>
    </div>

    <script src="../../js/vue-development.js"></script>
    <script>
        let vm = new Vue({
            el:"#app",
            data(){
                return {
                    msg:"大家一起玩转vue~",
                    o:"box",
                    flag:true,
                    flag2:true
                }
            }
        });
    </script>
</body>

条件相关的指令:

v-if  控制是否创建和销毁
    v-if后面普通也是跟状态  控制一个元素是否渲染出来,是否销毁掉
    v-if可以控制一个盒子创建和销毁
    和v-if配对的,还有v-else 和 v-else-if
v-show 控制样式实现显示和隐藏
    它是控制盒子的样式,来实现盒子的隐藏和显示
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .box{
            width: 200px;
            height: 200px;
            background-color: purple;
        }
    </style>
</head>
<body>
    <div id="app">
        <h1>{{ msg }}</h1>
        <!--<div v-if="flag" class="box">这是一个大盒子</div>-->
        <!--<div v-show="flag" class="box">这是一个大盒子</div>-->

        <!--<div v-if="flag">今天讲vue</div>
        <div v-else>明天讲react</div>-->

        <div v-show="flag">今天休息</div>
        <div v-show="!flag">明天休息</div>
    </div>
    <script src="../../js/vue-development.js"></script>
    <script>
        let vm = new Vue({
            el:"#app",
            data(){
                return {
                    msg:"大家一起玩转vue~",
                    flag:true
                }
            }
        });
    </script>
</body>

v-for指令:

v-for循环数组:<li v-for="(item,index) in news">  item是数组中每一项数据  index是索引
v-for循环对象:<td v-for="(value,key) in wangcai">{{ value }}</td>
v-for循环整数:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="app">
        <ul>
            <li v-for="(item,index) in news">
                {{ item }}   索引:{{ index }}
            </li>
        </ul>
        <hr>
        <ul>
            <li v-for="(item,index) in movies">
                电影名字:<strong>{{ item.name }}</strong>  ---->  电影的链接: <a :href="item.link">{{item.name}}</a>
            </li>
        </ul>
        <hr>
        <table border="1">
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>地址</th>
                <th>成绩</th>
            </tr>
            <tr>
                <td v-for="(value,key) in wangcai">{{ value }}</td>
            </tr>
            <tr>
                <td v-for="(value,key) in wangcai">{{ key }}</td>
            </tr>
        </table>
        <hr>
        <p v-for="(item,index) in 10">
            item:{{ item }} --------> index:{{ index }}
        </p>
    </div>
    <script src="../../js/vue-development.js"></script>
    <script>
        let vm = new Vue({
            el:"#app",
            data(){
                return {
                    news:["新闻1","新闻2","新闻3","新闻4","新闻5","新闻6","新闻7"],
                    movies:[
                        {name:"a",link:"www.baidu.com"},
                        {name:"b",link:"www.baidu.com"},
                        {name:"c",link:"www.baidu.com"},
                        {name:"d",link:"www.baidu.com"},
                        {name:"e",link:"www.baidu.com"},
                    ],
                    wangcai:{ name:"wc",age:100,address:"bj",score:10 }
                }
            }
        });
    </script>
</body>
</html>

v-for嵌套:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="app">
        <table border="1">
            <tr>
                <th>姓名</th>
                <th v-for="(item,index) in subjects">{{ item }}</th>
            </tr>
            <tr v-for="(item,index) in scores">
                <td>{{item.name}}</td>
                <td v-for="(score,idx) in item.score">{{score}}</td>
            </tr>
        </table>
    </div>
    <script src="../../js/vue-development.js"></script>
    <script>
        let vm = new Vue({
            el:"#app",
            data(){
                return {
                    subjects:["语文","数学","英语"],
                    scores:[
                        {name:"wangcai",score:[80,90,50]},
                        {name:"xiaoqiang",score:[20,70,50]},
                        {name:"lihua",score:[50,80,20]},
                        {name:"limei",score:[70,40,80]},
                        {name:"qiqi",score:[80,60,70]},
                    ]
                }
            }
        });
    </script>
</body>
</html>

事件绑定:

在vue中给标签绑定事件,使用v-on指令。<button v-on:click="f1">点我</button>
v-on可以简写,简写成@,<button @click="f1">点我</button>

事件绑定传参:<button @click="f2(1,2)">点我3</button>

如果不传参:
    <button @click="f1">点我2</button>
    <button @click="f1()">f1()</button>
    在vue中绑定事件,如果不传参数,()可以写,可以不写。

要获取数据事件:
    1) 如果在事件绑定时,不写(),那么监听器的第1个参数就是事件对象 <button @click="f3">f3</button>
     f3(e){
        console.log(e)
     }
    2) 如果在事件绑定时,写了(),那么监听器的第1个参数就不是事件对象,第1个参数就变成普通的形参

    如果想传参,又想获取事件对象:  需要手动地写$event,$event就代表事件对象
        <button @click="f3(1,$event)">f3(1,$event)</button>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="app">
        <button v-on:click="f1">v-on:click=f1</button>
        <button @click="f1">f1</button>
        <button @click="f1()">f1()</button>
        <button @click="f2(1,2)">f2(1,2)</button>
        <hr>
        <h2>事件对象</h2>
        <button @click="f3">f3</button>
        <button @click="f3()">f3()</button>
        <button @click="f3(1)">f3(1)</button>
        <button @click="f3(1,$event)">f3(1,$event)</button>
    </div>

    <script src="../js/vue-development.js"></script>
    <script>
        let vm = new Vue({
            el:"#app",
            data(){
                return {
                }
            },
            methods:{  // methods主要是给模板提供方法
                f1(){
                    alert("f1")
                },
                f2(a,b){
                    alert(a+b)
                },
                f3(a,e){
                    console.log(a)
                    console.log(e)
                }
            }
        });
    </script>
</body>
</html>

事件修饰符:

.prevent   阻止默认事件
.stop   阻止事件冒泡
....

按键修饰符:

每一个按键都有特殊的符号。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="app">
        <button @click="one">one</button>
        <button @click="two('wangcai')">two("wangcai")</button>
        <button @click="three(18,$event)">three(18,$event)</button>
        <hr>
        <div style="width: 200px; height: 200px; background-color: red;" @click="five">
            <!--@click.stop 阻止事件冒泡-->
            <button @click.stop="four">son</button>
        </div>
        <hr>
        <a href="http://wwww.xxx.com" @click.prevent="six">xxx</a>
        <hr>
        <!--@keyup.enter 表示你按了回车键,就触发  alt  shift tab ....-->
        <input type="text" @keyup.enter="seven">
    </div>

    <script src="../js/vue-development.js"></script>
    <script>
        let vm = new Vue({
            el:"#app",
            data(){
                return {
                    /*one(){   // 监听器放data中也OK    一般情况,不要放data中
                        console.log("one")
                    }*/
                }
            },
            methods:{  // methods主要是给模板提供方法
                one(e){
                    console.log(e)
                    console.log(e.target.innerHTML)
                },
                two(name){
                    console.log(name)
                },
                three(age,e){
                    console.log(age)
                    console.log(e)
                },
                four(e){
                    // e.stopPropagation(); // 使用事件对象来阻止事件冒泡
                    console.log("button four")
                },
                five(){
                    console.log("div five")
                },
                six(e){
                    // e.preventDefault(); // 使用事件对象来阻止默认事件
                    console.log("a标签的点击事件")
                },
                seven(){
                    console.log("按键抬起来")
                }
            }
        });
    </script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值