Vue.js

Vue.js 简介
  • JS框架
  • 简化Dom操作
  • 响应式数据驱动
 
第一个Vue程序:(使用Live server插件,开启5500端口)
  1. 导入开发版Vue.js
  2. 创建Vue实例对象,设置el、data属性
  3. 使用模板语法将数据渲染到页面
    <div id="app">
        {{ message }}
    </div>
    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                message: '你好,小黑!'
            }
        })
    </script>
 
el挂载点
作用:设置Vue实例挂载(管理)的元素
Vue实例的作用范围
管理el选项中命中的元素及其后代元素
 
Vue可以选择其他选择器,但是建议使用ID选择器。因为id选择器一般约定为是唯一的,其他像class等选择器都会命中多个元素,容易造成混淆
 
Vue可设置其他dom元素,但必须是双标签元素,且不能使用htmlbody
 
 
data数据对象
 
Vue中用到的数据会定义在data中,支持简单和复杂的数据类型(字符串、对象、数组),在渲染复杂数据类型时,遵守js语法即可
<div id="app">
        {{ message }}
        <h2>{{school.mobie}}</h2>
        <ul>
            <li>{{campus[0]}}</li>
            <li>{{campus[1]}}</li>
            <li>{{campus[2]}}</li>
        </ul>
    </div>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                message: "你好!",
                school: {
                    name: "黑马程序员",
                    mobie: "12345678909"
                },
                campus: ["beijing", "shanghai", "shenzhen"]
            }
        })
    </script>
 
v-text指令
作用:设置标签的文本内容,即元素的textContent属性
默认的写法(v-text="")会替换全部内容,而推荐使用的差值表达式({{}})可以替换指定内容,v-text内部支持写表达式,如拼接
<div id="app">
        <h2 v-text="message+'拼接'">深圳</h2>
        <h2 v-text="info">深圳</h2>
        <h2>{{message}}深圳</h2>
        <h2>{{info+'+教研部'}}</h2>
</div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                message: '你好,小黑!!!!',
                info: "前端与移动教研部"
            }
        })
    </script>
 
v-html指令
作用:设置元素的innerHTML。当内容中有html结构时会解析为标签显示出来。如果是v-text拿到了只能解析出来文本。
<div id="app">
        <p v-html="content"></p>
        <p v-text="content"></p>
    </div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                // content: '黑马程序员',
                content: "<a href='http://www.baidu.com'>黑马程序员</a>"
            }
        })
    </script>
 
v-on指令
作用:为元素绑定事件
使用vue时,事件名不需要写on。
v-on:click="xxx"
也可以使用vue的语法糖,直接使用@替代“v-on:”,即 @click="xxx"
绑定的方法在methods属性中定义,方法内部通过this关键字访问定义在data里的数据
 
  • 事件绑定的方法写成函数调用的形式,可传入自定义参数,对应在定义方法时,使用形参来接收实参。
  • 事件的后面可加上.修饰符对事件进行限制,例如:@keyup.enter 按下enter键触发事件
 
小demo——简单计数器
类似购物车的商品数量,逻辑简单,有JS基础+vue简单指令即可完成
<div id="app">
        <input type="button" value="-" @click="subNum">
        <span>{{ number }}</span>
        <input type="button" value="+" @click="addNum">
    </div>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                number: 1
            },
            methods: ({
                addNum: function () {
                    if (this.number >= 10) {
                        alert("满啦!再点就溢出来啦!");
                    } else {
                        this.number++;
                    }
                },
                subNum: function () {
                    if (this.number <= 0) {
                        alert("我也是有底线的!");
                    } else {
                        this.number--
                    }
                }
            })
        })
    </script>
 
v-show 指令
作用:根据boolean值切换元素的显示状态
原理是通过修改元素的display属性实现显示隐藏,格式为:v-show="data属性名/表达式";v-show指令寿面的内容最终都会被解析成boolean值:
<img v-show=">isShow" src="./pic.png" alt="">
<img v-show="age>18" src="./pic.png" alt="">
当表达式中的数据被改变时,对应的元素显示状态会同步更新
 
v-if指令
作用:通过表达式的boolean值切换元素显示状态
原理是通过操纵dom元素来切换。当ture时,元素存在于dom树中,当false时,从dom树中移除,这是与v-show的最大区别
v-show只是修改元素属性,而v-if直接操纵dom树。操作dom树资源消耗较大,所以频繁切换使用v-show,繁殖使用v-if
<div id="app">
        <input type="button" value="切换" @click="toggleIsShow">
        <p v-if="isShow">黑马程序员</p>
        <p v-show="isShow">黑马程序员 - v-show修饰</p>
        <input type="button" value="添加温度" @click="addTemp">
        {{temp}}
        <h2 v-if="temp>=36">热死啦!!</h2>
    </div>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                isShow: false,
                temp: 30
            },
            methods: {
                toggleIsShow: function () {
                    this.isShow = !this.isShow
                },
                addTemp: function () {
                    this.temp++;
                }
            }
        })
    </script>
 
v-bind指令
作用:为元素绑定属性
完整写法  v-bind:属性名   简单写法(省略v-bind)  :属性名
动态操作class,可以直接使用对象形式,即:
:class="isActive?'active':''"——:class="{active:isActive}"
由三元表达式形式更改为对象形式
<style>
        .active {border: 1px solid red;}
    </style>
</head>
<body>
    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <div id="app">
        <img :src="imgStc" :title="imgTitle+'!!!'" srcset="" :class="{active:isAtive}" @click="toggleActive">
    </div>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                imgStc: "./pic.png",
                imgTitle: "黑马程序员",
                isAtive: false
            },
            methods: {
                toggleActive: function () {
                    this.isAtive = !this.isAtive;
                }
            }
        })
    </script>
 
图片切换demo
轮播图,点击按钮切换下一张图
 
    <div id="app">
        <input v-show="index!=0" type="button" value="上一张" @click="prev">
        <img :src="imgArr[index]" srcset="">
        <input v-show="index<imgArr.length-1" type="button" value="下一张" @click="next">
    </div>
 
 
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                imgArr: ["./vue.png", "./github.png", "./touxiang.png", "./yinxiang.png", "douban.png"],
                index: 0
            },
            methods: {
                prev: function () {
                    this.index--;
                },
                next: function () {
                    this.index++;
                }
            }
        })
    </script>
 
v-for指令
作用:根据列表数据生成列表结构,一般是数组结构
语法:(item, index) in data
item和index可结合其他指令一起使用,数组数据的变化会实时更新到页面
<div id="app">
        <input type="button" value="添加" @click="add">
        <input type="button" value="删除" @click="remove">
        <ul>
            <li v-for="(item, index) in arr">{{index+1}}黑马程序员校区{{item}}</li>
        </ul>
        <h2 v-for="item in vegtables" :title="item.name">
            {{item.name}}
        </h2>
    </div>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                arr: ["北京", "上海", "广州", "深圳", "重庆",],
                vegtables: [
                    { name: "西蓝花炒蛋" },
                    { name: "小炒黄牛肉" },
                    { name: "西红柿蛋汤" },
                    { name: "永新狗肉" }
                ]
            },
            methods: {
                add: function () {
                    this.vegtables.push({ name: "清炒黄瓜" });
                },
                remove: function () {
                    this.vegtables.shift();
                }
            }
        })
    </script>
 
v-model指令
作用:便捷设置和获取表单元素的值,绑定的数据与表单元素的值相互关联,无论修改谁都会同步数据
 
小黑记事本Demo
功能:新增、删除、统计、清空、隐藏
 
记事本:
简单的记事本功能,包括增删、统计、清空
    <!-- 主体区域 -->
    <section id="todoapp">
        <!-- 输入框 -->
        <header class="header">
            <h1>小黑记事本</h1>
            <input autofocus="autofocus" autocomplete="off" placeholder="请输入任务" class="new-todo"
                @keyup.enter="addTodo(todoMsg)" v-model="todoMsg" />
        </header>
        <!-- 列表区域 -->
        <section class="main">
            <ul class="todo-list">
                <li class="todo" v-if="todoArr.length>=0" v-for="(item, index) in todoArr">
                    <div class="view">
                        <span class="index">{{ index+1 }}</span> <label>{{ item }}</label>
                        <button class="destroy" @click="delTodo(index)"></button>
                    </div>
                </li>
            </ul>
        </section>
        <!-- 统计和清空 -->
        <footer class="footer">
            <span class="todo-count"> <strong>{{todoArr.length}}</strong> items left </span>
            <button class="clear-completed" @click="clearTodo">
                Clear
            </button>
        </footer>
    </section>
    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var todo = new Vue({
            el: "#todoapp",
            data: {
                todoMsg: "",
                todoArr: ["写代码", "吃饭饭", "睡觉谁", "赚钱钱", "上班班"]
            },
            methods: {
                addTodo: function (val) {
                    //1.追加一个<li>,并将input中的文字传入列表2. 清空input
                    this.todoMsg = "";
                    this.todoArr.push(val)
                },
                delTodo: function (ind) {
                    //根据index删除
                    this.todoArr.splice(ind, 1);
                },
                clearTodo: function () {
                    this.todoArr = [],
                        this.isClear = !this.isClear;
                }
            }
        })
    </script>
 
网络应用——axios
封装axjax,使用简单
 
 
原文地址:https://www.cnblogs.com/yuan-zhou/p/15400439.html