Vue的常见指令

一、什么是Vue?

它是构建用户界面的JavaScript框架(让它自动生成js,css,html等)

二、Vue的引入

三、初识Vue-----简单demo

每个 Vue 应用都需要通过实例化 Vue 来实现。

语法格式如下:
const app = new Vue({
  // 选项
})

接下来让我们通过实例来看下 Vue 构造器中需要哪些内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/vue/2.5.17-beta.0/vue.js"></script>
</head>
<body>
<div id="app">
    <!--引用数据-->
    {{name}}
    {{age}}
</div>
<script>
    //创建Vue根实例
    const app = new Vue({
        //指定作用域
        el: "#app",
        //数据
        data: {
            name: "wangjifei",
            age: '27',
        }
    })
</script>
</body>
</html>
  • 可以看到在 Vue 构造器中有一个el 参数,它是 DOM 元素中的 id。这意味着我们接下来的改动全部在以上指定的 div 内,div 外部不受影响。

  • data 用于定义属性,实例中有三个属性分别为:name、age。

  • methods 用于定义的函数,可以通过 return 来返回函数值。

  • {{ }} 用于输出对象属性和函数返回值。

  • 当一个 Vue 实例被创建时,它向 Vue 的响应式系统中加入了其 data 对象中能找到的所有的属性。当这些属性的值发生改变时,html 视图将也会产生相应的变化

四、常见指令介绍

  • 指令是带有 v- 前缀的特殊属性。指令用于在表达式的值改变时,将某些行为应用到 DOM 上。
  • 指令修饰符
    修饰符是以半角句号 . 指明的特殊后缀,用于指出一个指定应该以特殊方式绑定。例如:
    .lazy 懒加载,等到input框失去焦点时再显示数据
    .trim 去处数据空格
    .number 数字
  • v-text 绑定文本、v-html 绑定html
<div id="app">
    <p v-text="a"></p>
    <div v-html="b"></div>
</div>
<script>
    //创建Vue根实例
    const app = new Vue({
        el: "#app",
        data: {
            a: "A",
            b: `<h1>我是html</h1>`
        }
    })
</script>
  • v-model(input标签、textarea标签、select标签)
    在 input 输入框中我们可以使用 v-model 指令来实现双向数据绑定
<div id="app">
    用户名:
    <input type="text" v-model.lazy.trim="name">
    <pre>{{name}}</pre>
    <hr>
    手机号:
    <input type="text" v-model.number="phone">
    <pre>{{phone}}</pre>
</div>
<script>
    const app = new Vue({
        el: "#app",
        data: {
            name: "",
            phone: "",
        }
    })
</script>
<div id="app">
    <textarea name="" id="" cols="30" rows="10" v-model="article"></textarea>
    {{article}}
</div>
<script>
    const app = new Vue({
        el: "#app",
        data: {
            article:''
        }
    })
</script>
<div id="app">
    <select v-model="from">
        <option value="1">河北</option>
        <option value="2">山西</option>
    </select>
    <pre>{{from}}</pre>
    <select v-model="where" multiple>
        <option value="1">上地</option>
        <option value="2">西二旗</option>
        <option value="3">三里屯</option>
    </select>
    <pre>{{where}}</pre>
</div>
<script>
    const app = new Vue({
        el: "#app",
        data: {
            from: '1',
            where: '1'
        }
    })
</script>
  • v-for
    v-for 指令需要以 ** in **s 形式的特殊语法, **s 是源数据数组并且 ** 是数组元素迭代的别名。v-for 可以绑定数据到数组来渲染一个列表
<div id="app">
    <h1>展示你们的爱好</h1>
    <ul>
        <li v-for="hobby in hobby_list">{{hobby}}</li>
    </ul>

    <h1>展示你们喜欢吃的食物</h1>
    <ul>
        <li v-for="food in food_list">{{food.name}}它的价格是:{{food.price}}</li>
    </ul>
</div>
<script>
    const app = new Vue({
        el: "#app",
        data: {
            hobby_list: ["美女", "LOL", "吃鸡"],
            food_list: [
                {
                    name: "臭豆腐",
                    price: 6,
                },
                {
                    name: "韭菜盒子",
                    price: 10,
                }
            ]
        }
    })
</script>
  • v-bind (:) 通过v-bind可以动态绑定标签上的属性值,例如可以绑定a标签的href属性
<div id="app">
    <a :href="path">@马云</a>
</div>
<script>
    const app = new Vue({
        el: "#app",
        data: {
            path: "http://www.taobao.com",
        }
    })
</script>
  • v-on (@)
    按钮的事件我们可以使用 v-on 监听DOM事件,并在触发时运行一些js代码。因为许多事件处理的逻辑很复杂,所以直接将js代码写在v-on指令是不可行的,因此使用v-on绑定事件名,通过事件名来调对应逻辑的方式。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/vue/2.5.17-beta.0/vue.js"></script>
    <style>
        .active {
            background: red;
            width: 100px;
            height: 100px;
        }
    </style>
</head>
<body>
<div id="app">
    <!--<a v-bind:href="path">@马云</a>-->
    <a :href="path">@马云</a>
    <button @click="on_click">点我显示盒子的样式</button>
    <div v-on="{mouseenter: onMouseenter, mouseleave: onMouseleave}">鼠标事件</div>
</div>

<script>
    const app = new Vue({
        el: "#app",
        data: {
            path: "http://www.taobao.com",
        },
        methods: {
            on_click: function () {
                this.show = !this.show
            },
            onMouseenter: function () {
                console.log("鼠标移入了")
            },
            onMouseleave: function () {
                console.log("鼠标移出了")
            }
        }
    })
</script>
</body>
</html>
  • v-if、v-else-if、v-else,通过判断v-if来控制元素存在与否,v-if通过判断后面的值是true或者false来决定,另外v-else不可以单独使用,必须搭配v-if来使用。
<div id="app">
    <div v-if="role == 'vip'">
        <h1>欢迎会员登陆</h1>
    </div>
    <div v-else-if="role == 'vvip'">
        <h1>您的专属秘书为您服务</h1>
    </div>
    <div v-else>
        <p>gun~~~~~</p>
    </div>
</div>

<script>
    const app = new Vue({
        el: "#app",
        data: {
            role: "vip",
        }
    })
</script>

这里, v-if 指令将根据表达式 "role=='vip'" 的值(true 或 false )来决定是否插入 h1标签。

  • v-show 控制的是DOM对象的显示或者隐藏,即display属性
<div id="app">
    <button @click="on_click">点我</button>
    <p v-show="show">天苍苍</p>
    <p v-if="a =='if_show'">野茫茫</p>
    <p v-else>风吹草低见牛羊</p>
</div>
<script>
    const app = new Vue({
        el: "#app",
        data: {
            show: false,
            a: "if_show"
        },
        methods: {
            on_click: function () {
                this.show = !this.show
            }
        }
    })
</script>
  • 自定义指令,通过自定义指令来实现我们自己想要实现的指令效果
<div id="app">
    <div class="active" v-pin.left.bottom="show">
    </div>
</div>
<script>
    //自定义指令必须调用directive方法来实现,pin是自定义指令名,el为当前绑定自定义指令的html标签,binding是一个包含自定义指令中的各种属性或值的对象,
    Vue.directive("pin", function (el, binding) {
        console.log(el)
        console.log(binding)
        let val = binding.value;
        //modifiers中存储的是自定义指令中的所有修饰符内容
        let positons = binding.modifiers;
        if(val){
            for(let key in positons){
                el.style.position = "fixed";
                console.log(key)
                el.style[key]=0;
            }
        }else {
            el.style.position = "static";
        }
    });
    const app = new Vue({
        el: "#app",
        data: {
            show: true,
        }
    })
</script>
  • 计算属性computed
    计算属性关键词: computed。计算属性在处理一些复杂逻辑时是很有用的,在使用计算属性时,对于不变的数据,计算属性会通过缓存来存储,当再次调用可以直接从缓存中取出,提高效率,节省CPU,只有当数据发生改变时,才会对数据再次处理。
<div id="app">
    <table border="1">
        <thead>
            <th>学科</th>
            <th>分数</th>
        </thead>
        <tbody>
            <tr>
                <td>数学</td>
                <td><input type="text" v-model.number="math"></td>
            </tr>
            <tr>
                <td>英语</td>
                <td><input type="text" v-model.number="english"></td>
            </tr>
            <tr>
                <td>物理</td>
                <td><input type="text" v-model.number="physics"></td>
            </tr>
            <tr>
                <td>总分</td>
                <td>{{sum_num}}
                </td>
            </tr>
            <tr>
                <td>平均分</td>
                <td>{{average}}</td>
            </tr>
        </tbody>
    </table>
</div>
<script>
    const app = new Vue({
        el: "#app",
        data: {
            math: 95,
            english: 59,
            physics: 100,
        },
        computed: {
            sum_num: function () {
                let total = this.math + this.english  + this.physics
                return total
            },
            average: function () {
                let ret = Math.round(this.sum_num/3)
                return ret
            }
        }
    })
</script>
上一篇:MSSQL - 最佳实践 - 如何打码隐私数据列


下一篇:Django中的ModelForm