带你走入Vue

188 阅读2分钟

一、vue的使用

1.引入方式

cdn

<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>

<!-- 生产环境版本,优化了尺寸和速度 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>

本地

通过cdn或者官方网站地址下载到本地以js方式引入

2.简单使用Vue

2.1普通数据

html结构

<div id="app">
    <h1>{{text}}</h1>
</div>

引入vuejs后再书写 js部分

 
new Vue({
            el:"#app",
            data:{
                text:'我是标题'
            }
 })

2.2复杂数据

<div id="app">
    <p>{{student.name}}今年{{student.age}}岁,性别:{{student.sex}}</p>
</div>
new Vue({
    el: "#app",
    data: {
        student: {
            name: '张三',
            age: 20,
            sex: '男'
        }
    }
})

3.快速创建使用vue结构 -- 代码片段

{
	"html:5": {
		"prefix": "hv",
		"body": [
			"<!DOCTYPE html>",
			"<html en=\"zh_cn\">",
			"<head>",
			"\t<meta charset=\"UTF-8\">",
			"\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">",
			"\t<meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">",
			"\t<title>标题</title>",
			"<link rel=\"icon\" href=\"../../lib/logo.svg\">",
			"</head>",
			"<body>",
			"<div id=\"app\"></div>",
			"</body>",
			"</html>",
			"<script src=\"../../lib/vue.js\"></script>",
			"<script>",
			"new Vue({",
			"\tel: \"#app\",",
			"\tdata: {",
			"\t",
			"\t}",
			"})",
			"</script>"
		],
		"description": "HTML5"
	}
}

4.经典练习题 -- 双向绑定

4.1双向绑定 -- 原生js

<!-- oninput事件 动态获取 -->
<input type="text" oninput="addInput(this.value)" value="">
<p id="text"></p>
let inp = document.querySelector('input')
let txt = document.querySelector('#text')
let data = {}
// 对象方法 动态添加属性 define -- 定义  Property -- 属性
// Object.defineProperty(对象名,定义属性,配置项 }
Object.defineProperty(data, 'msg', {
    // get 代表要赋值给msg的值
    get: function () {
        return '你好原生js双向绑定'
    },
    // set 修改msg值时触发 ,拿到最新数据 - 你要做什么事
    set: function (newText) {
        inp.value = newText
        txt.innerText = newText
    }
})
inp.value = data.msg
txt.innerText = data.msg
// 封装函数动态获取内容
function addInput(text) {
    // 当msg发生修改数据会 -- 自动触发set 
    data.msg = text
}

4.2双向绑定 -- vue.js

<div id="app">
    <input type="text" v-model="text">
    <p>{{text}}</p>
</div>
new Vue({
    el: "#app",
    data: {
        text:'双向数据绑定'
    }
})

5.各种指令的使用

5.1 、v-pre

<div id="app">
    <!-- 
        v-pre 的作用:
        让{{}}(胡子/Mustache) 语法失效 使他显示原本的内容
    -->
    <p>当用户输入 <span v-pre>{{msg}}</span> 时可以看到{{msg}}</p>
</div>
new Vue({
    el: "#app",
    data: {
        msg: ' hello word !'
    }
})

5.2、v-html 与 v-text

<!-- 
    v-html 与 v-text 的区别
    v-html 可以解析标签
    v-text 不能解析标签 把内容以纯文本输出 与 胡子语法/Mustache {{text}} 一样
-->
<div id="app">
    <ul>
        <li v-html="div"></li>
        <li v-text="div"></li>
        <li>{{div}}</li>
        <li>----------------</li>
        <li v-html="text"></li>
        <li v-text="text"></li>
        <li>{{text}}</li>
    </ul>
new Vue({
    el: "#app",
    data: {
        div: "<span>我是标签和内容</span>",
        text: '我是内容'
    }
})

5.3、 v-cloak

<!--
     v-cloak的作用
        在数据没渲染时隐藏标签,数据渲染完成后显示
-->
<div id="app">
    <ul>
        <li>{{msg1}}</li>
        <li v-cloak>{{msg2}}</li>
    </ul>
</div>
new Vue({
    el: "#app",
    data: {
        msg1: '内容1',
        msg2: '内容2'
    }
})

5.4、v-show

<!-- 
    v-show 与 v-if的区别:
    v-show --性能更好 是css层面上的修改
    v-if功能更多 ---- 元素上的销毁与创建 
    使用环境
    频繁隐藏显示使用v-show
    只渲染一次并且不需要修改 -- 两种都可
 -->
<div id="app">
    <div class="box" v-show="flag1">box1</div>
    <div class="box" v-if="flag2">box2</div>
</div>
new Vue({
    el: "#app",
    data: {
        flag1: true,
        flag2: true
    }
})

5.5、v-if

<!-- 和if else if 与 else 一样 -->
<div id="app">
    <ul>
        //判断分数显示对应评级
        <li v-if="num>=90">优秀</li>
        <li v-else-if="num>=60">及格</li>
        <li v-else style="color:red">不及格</li>
    </ul>
</div>
new Vue({
    el: "#app",
    data: {
        num:50 //自定义分数
}
})

5.6、v-on

<div id="app">
    <button v-on:click="btnFun">按钮1</button>
    <!-- 简便写法 -->
    <button @click="btnFun">按钮2</button>
    <div class="box" v-show="flag"> 内容 </div>
</div>
var item
new Vue({
    el: "#app",
    // 专门放数据的地方
    data: {
        flag: true
    },
    // 专门存放函数的地方
    methods: {
        btnFun() {
            // console.log(this);
                this.flag = !this.flag
        }
    }
})

简化写法:v-on:click -- @click

5.7练习 -- 实现简单的内容切换 -- 显示隐藏

css样式

#app {
    text-align: center;
}

html结构

<div id="app">
    <!-- <button @click="btnClick(1)">盒子1</button>
    <button @click="btnClick(2)">盒子2</button>
    <button @click="btnClick(3)">盒子3</button> -->
    <!-- 优化代码 -->
    <button @click="num=1">盒子1</button>
    <button @click="num=2">盒子2</button>
    <button @click="num=3">盒子3</button>
    <hr>
    <div class="box1" v-show="num==1">盒子1</div>
    <div class="box2" v-show="num==2">盒子2</div>
    <div class="box3" v-show="num==3">盒子3</div>
</div>

js部分

new Vue({
    el: "#app",
    data: {
        num: 1
    },
    // 优化代码 注释掉原来的函数 -- 使用  @click="num=1" ↑(html优化代码部分)
    // methods: {
    //     btnClick(id) {
    //         this.num = id
    //     }
    // }
})