vue指令

1.vue介绍

  目前最火的三款前端框架:AngularJs、VueJs、ReactJs

  vue用于构造用户界面的渐进式框架,它最大的优势在于视图组件化,其核心库只关心视图层

  我们为什么要学习vue?它解决了什么问题?答案链接

2.vue安装

  独立版本

    可以在 Vue.js 的官网上直接下载 vue.min.js 并用 <script> 标签引入。

  使用CDN

    BootCDN

3.案例操作

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>
<body>
    <div id="app">
        <p>{{ msg }}</p>
        <p>{{ 8+2 }}</p>
        <h2 v-text="msg"></h2>
        <h2 v-html="temp"></h2>
    </div>
    <div id="app2">
        <span v-bind:title="msg">鼠标悬停</span>
    </div>
</body>
<script>
        new Vue({
        el:"#app",
        data:{
            msg:"麻溜的很",
            temp:"<input type=\"button\" value=\"框体\">"
        },
    });
        new Vue({
            el:"#app2",
            data:{
                msg:'页面加载于'+new Date().toLocaleDateString()
            }
        });
</script>
</html>

效果:

案例说明:

  1.导入路径,我使用的是网络路径,一般最好应用本地路径

  2.这里的{{ }}用于插入文本,它也可以放表达式

  3.这里的v-text,v-html,v-都是指令,以表示它们是 Vue 提供的特殊特性,它们会在渲染的 DOM 上应用特殊的响应式行为

  4.在div标签内添加注释,这里注释方式 <!-- 注释 -->,记住不要在pycharm中选用自动的注释{ #  # },这种会被渲染在主页面

  5.在页面上渲染出来的值,可以在F12的面板下通过app.msg获取,并且实现实时修改

3.1指令详细说明(自己提前导入Vue)

v-html:在元素当中可以插入文本,也能插入标签

<body>
    <div id="app-3">
        <h3 v-html="lable"></h3>
        <h3 v-html="str"></h3>
    </div>
</body>
<script>
    new Vue({
        el: '#app-3',
        data: {
            lable:"<button>编辑</button>",
            str:"只是字符串"
        }
    })
</script>

效果:

v-if和v-else:根据表达式的真假值来动态插入和移除元素

<body>
    <div id="app-4">
        <h3 v-if="seen">you seen me</h3>
        <h3 v-else>no no no</h3>
    </div>
    <div id="app-5">
        <template v-if="ok">
            <h1>今天是新的一周</h1>
            <p>你要加油哦</p>
        </template>
        <template v-else>
            <h1>今天是新的一周</h1>
            <p>你要继续努力</p>
        </template>
    </div>
</body>
<script>
    new Vue({
        el: '#app-4',
        data: {
            seen:true
        }
    })

    new Vue({
        el: '#app-5',
        data: {
            ok:false
        }
    })
</script>

效果:

v-for可以绑定数组的数据来渲染一个项目列表

<body>
    <div id="app-6">
        <div v-for="i in 3">
            {{i}}
        </div>
        <ol>
            <li v-for="item in obj">
                {{item.user}}
                {{item.age}}
                {{item.sex}}
            </li>    
            
        </ol>
        <ul>
            <li v-for="plan in projects">
                {{plan.text}}
            </li>        
        </ul>
    </div>
</body>
<script>
    var vm = new Vue({
        el:'#app-6',
        data:{
            projects:
            [{text:"整理博客"},{text:"梳理内容"},{text:"敲代码"}],        
            // 之间有一个逗号,注意了,找了老半天bug
            obj:
            [{user:"张三"},{age:20},{sex:"male"}],
        }
    })
</script>

v-on:监听元素事件

v-bind:绑定元素属性并执行相应操作

在reverseMessage方法中,更新了应用状态,它的DOM操作都通过vue进行处理

<body>
    <div id="app-7">
        <!-- v-on的两种写法 -->
        <p>{{ msg }}</p>
        <button v-on:click="reverseMessage">逆转消息</button>
        <button @click="reverseMessage">逆转消息</button>
        <!-- v-bind的三种表现方式 -->
        <a href="http://www.baidu.com">百度</a>
        <a v-bind:href="url">还是百度</a>
        <a :href="url">这也是百度</a>
    </div>
</body>
<script>
    var vm = new Vue({
        el:'#app-7',
        data:{
            msg: 'Hello Vue.js!',
            url:"http://www.baidu.com"
        },    
        methods:{
            reverseMessage: function () {
                this.msg = this.msg.split('').reverse().join('')
            }
        }
    })

效果

v-model:把input的值和变量绑定,实现表单输入和应用状态之间的双向绑定

<body>
    <div id="app-8">
        <p>{{msg}}</p>
        <input v-model="msg">
    </body>
</div>
<script>
    var app = new Vue({
        el:"#app-8",
        data:{
            msg:"biubiu"
        }
    });
</script>

效果:

vue操作数组的相关指令:

    - push  #从末尾添加
    - pop  #从末尾删除
    - shift #从头添加
    - unshift #从头删除
    - splice #删除元素。splice(索引,删除个数,插入个数)  #删除这个索引的那一个
    - reverse  #反转

 v-if和v-show下的显示与隐藏

<div id="app">
    <p v-if="ok">尼克胡哲</p>
    <p v-show="ok">尼克胡哲</p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    var app = new Vue({
        el: "#app",
        data: {
            ok: true,
        },
    })
</script>

这两者的区别:

  v-if在false下直接被注释掉了,v-show只是被隐藏了

  对一个标签频繁操作的时候就用v-show

 4.计算属性和侦听器

4.1计算属性:computed

对于任何复杂逻辑,都应当使用计算属性

<body>
    <div id="app-9">
        <p>{{message}}</p>
        <!-- 带有括号,调用的是它的方法 -->
        <p>{{reverseMessage()}}</p>    
        <!-- 没有括号,计算的是它的属性 -->
        <p>{{reverseMessage2}}</p>
    </div>
</body>
<script type="text/javascript">
    var app = new Vue({
        el:"#app-9",
        data:{
            message:"aptx4869"
        },
        // 在表达式中调用方法来达到反向排序的效果
        methods:{
            reverseMessage:function(){
                return this.message.split('').reverse().join('')
            }
        },
        // 计算属性,这里声明了一个计算属性reverseMessage2,
        computed:{
            reverseMessage2:function(){
                return this.message.split('').reverse().join('')
            }
        
        }
    });
</script>

效果:

计算属性和方法这两种结果一样,但是过程还是存在很大区别的:

  计算属性是基于它们的依赖进行缓存的,只要data没有改变,多次访问reverseMessage2计算属性,它都会立即返回之前的计算结果,而不必再次执行函数

  针对实际场景需求,我们可以选择使用计算属性还是方法

4.2 侦听属性watch

当你有一些数据需要随着其它数据变动而变动时,此时需要某种方式来观察和响应 Vue 实例上的数据变动,现在就需要我们watch属性

<body>
    <div id="app-9">
        {{ fullName }}
        <br>
        {{ fullName2 }}
    </div>
</body>
<script type="text/javascript">
    var app = new Vue({
        el: '#app-9',
        data: {
            firstName: 'Foo',
            lastName: 'Bar',
            fullName: 'Foo Bar'
        },
        // 侦听属性
        watch: {
            firstName: function (val) {
                this.fullName = val + ' ' + this.lastName
            },
            lastName: function (val) {
                this.fullName = this.firstName + ' ' + val
            }
        },
        // 计算属性
        computed:{
            fullName2:function(){
                return this.firstName + ' ' + this.lastName
            }
        }
    })
</script>

将侦听属性与计算属性进行比较,其实计算属性效果要比他好的多

 

posted @ 2018-07-23 19:19  -Learning-  阅读(253)  评论(0编辑  收藏  举报