zoukankan      html  css  js  c++  java
  • 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>

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

  • 相关阅读:
    css中属性继承性总结
    CSS3属性transform(变形),transition(过渡),animation(动画)
    js中的addEventListener
    CSS换行:word-wrap、word-break和text-wrap差别以及 控制文本行数
    js取变量名的规则
    瀑布流布局及其原理
    利用chrome浏览器调试js断点
    return用法
    行内标签和块级元素有哪些
    2019年思岚科技第三季度大事记
  • 原文地址:https://www.cnblogs.com/LearningOnline/p/9356383.html
Copyright © 2011-2022 走看看