美文网首页
vue基础篇

vue基础篇

作者: sain_wu | 来源:发表于2019-12-01 03:23 被阅读0次

    本人是一名Android开发人员,最近项目前端人员吃紧,于是开始了vue的自学之旅。

    vue简介

    https://cn.vuejs.org 作者:尤雨溪

    1. JavaScript框架
    2. 简化Dom操作
    3. 响应式数据驱动(数据驱动视图)

    vue第一个程序

    1. 导入开发版本的Vue.js
    2. 创建Vue实例对象, 设置el属性和data属性
    3. 使用简洁的模板语法把数据渲染到页面上
    <body>
      <div id="app">
        <!-- 使用简洁的模板语法把数据渲染到页面上 -->
        {{ message }}
      </div>
      
      <!-- 导入开发版本的Vue.js -->
      <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    
      <script>
        // 创建Vue实例对象, 设置el属性和data属性
        var app = new Vue({
          el: '#app',
          data: {
            message: 'Hello Vue!'
          }
        })  
      </script>
    </body>
    

    el:挂载点,绑定页面元素

    • Vue会管理el选项命中的元素及其内部的后代元素
    • 可以使用其他的选择器,但是建议使用ID选择器
    • 可以使用其他的双标签,不能使用HTML和BODY
    MVVM

    Vue指令

    以v-开头的一组特殊语法,分为三类介绍

    1. v-text, v-html, v-on

    内容绑定,事件绑定

    • I. v-text (不如差值表达式好用)
      设置标签的文本值(textContent)
    <body>
      <div id="app">
          <!-- 设置标签的文本值(textContent) -->
          <h2 v-text="message+'!'">深圳</h2>
          <h2>{{ message +'!'}}深圳</h2>
      </div>
    
      <!-- 导入开发版本的Vue.js -->
      <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    
      <script>
        // 创建Vue实例对象, 设置el属性和data属性
        var app = new Vue({
          el: '#app',
          data: {
            message: 'Hello Vue',
          }
        })  
      </script>
    </body>
    

    网页渲染:
    Hello Vue!
    Hello Vue!深圳

    总结:
    默认写法会替换全部内容,使用差值表达式{{}}可以替换指定内容。

    • II. v-html
      设置标签的innerHTML
    <body>
      <div id="app">
          <!-- 设置标签的innerHTML -->
          <p v-html="message"></p>
          <p v-text="content"></p>
          <p v-html="content"></p>
      </div>
    
      <!-- 导入开发版本的Vue.js -->
      <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    
      <script>
        // 创建Vue实例对象, 设置el属性和data属性
        var app = new Vue({
          el: '#app',
          data: {
            message: 'Hello Vue',
            content: '<a href="https://cn.vuejs.org/">Hello Vue</a>'
          }
        })  
      </script>
    </body>
    

    网页渲染:

    总结
    v-text指令无论内容是什么,只会解析为文本
    v-html当内容中有html结构会被解析为标签,没有才解析为文本

    • iii. v-on
      为元素绑定事件
    <body>
      <div id="app">
          <!-- 为元素绑定事件 -->
          <input type="button" value="v-on指令" v-on:click="doIt">
           <!-- 指令可以简写为@ -->
          <input type="button" value="v-on@" @click="doIt">
          <!-- 传递参数-->
          <input type="button" value="v-on带参" @click="doIt1('you can ','you up')">
           <!-- 对事件进行限制, 限制触发的按键为回车-->
          <input type="text" @keyup.enter="sayHi">
      </div>
    
      <!-- 导入开发版本的Vue.js -->
      <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    
      <script>
        // 创建Vue实例对象, 设置el属性和data属性
        var app = new Vue({
          el: '#app',
          methods: {
                    doIt:function(){
                       console.log("无聊");  
                    },
                    doIt1:function(p1,p2){
                       console.log(p1 + p2);  
                    },
                    sayHi:function(){
                        alert("一边去");
                    }
                },
        })  
      </script>
    </body>
    

    总结
    事件绑定的方法写成函数调用的形式,可以传入自定义参数
    事件的后面跟上 .修饰符对事件进行限制,@keyup.enter可以限制触发的按键为回车
    vue方法不可以重载哦

    2. v-show, v-if, v-bind

    • i. v-show, v-if
      根据表达值的真假,切换元素的显示和隐藏
    <body>
      <div id="app">
        <input type="button" value="切换显示状态" @click="changeIsShow">
        <!-- 根据表达值的真假,切换元素的显示和隐藏 -->
        <p v-show="isShow">冻死了---v-show</p>
        <p v-if="isShow">冻死了</p>
      </div>
    
      <!-- 导入开发版本的Vue.js -->
      <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    
      <script>
        // 创建Vue实例对象, 设置el属性和data属性
        var app = new Vue({
          el: '#app',
          data: {
            isShow: false,
          },
          methods: {
            changeIsShow: function () {
              this.isShow = !this.isShow;
            },
          }
        })  
      </script>
    </body>
    

    点击切换,发现v-show和v-if都能实现元素显示状态的切换,它们之间有啥区别呢,右键点击inspect进入调试模式,可以发现隐藏时,它们是有区别的

    <div id="app">
        <input type="button" value="切换显示状态">
        <p style="display: none;">冻死了---v-show</p>
        <!---->
    </div>
    

    总结
    根据真假切换元素的显示状态,指令后面的内容,最终都会解析为布尔值
    v-show原理是修改元素的display,实现显示隐藏
    v-if本质是通过操纵dom元素来切换显示状态
    频繁切换用v-show,一次性用v-if

    • ii.v-bind
      设置元素的属性(比如:src,title,class)
      设想有一个需求,需要动态展示图片,你可能会说vue不就是数据驱动视图嘛
      定义一个变量imgUrl,不断修改imgUrl的值不就完了
    <img src={{imgUrl}}/>
    

    可是浏览器一运行,立马打脸。原来差值表达式{{}}只能修改元素的值(尖括号外面的),不能修改元素的属性。

    以下是一个动态更新猫图的网页,借用v-bind实现,api.thecatapi.com可以返回各种猫图

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    
    <head>
      <title>v-bind指令</title>
    </head>
    
    <body>
      <div id="app">
        <img v-bind:src="imgUrl" height="300" width="300"/>
        <!-- 简写的话可以直接省略v-bind -->
        <img :src="imgUrl" height="300" width="300"/>
      </div>
    
      <!-- 导入开发版本的Vue.js  -->
      <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    
      <script>
        // 创建Vue实例对象, 设置el属性和data属性
        var app = new Vue({
          el: '#app',
          data: {
            imgUrl: "https://cdn2.thecatapi.com/images/73q.jpg",
          },
          methods: {
            start: function () {
                this.loadURL();
                setInterval(this.loadURL, 3000);
            },
            loadURL: function() {
                var _this = this;
                ajax_get('https://api.thecatapi.com/v1/images/search?size=full', function(data) {
                    var url = data[0]["url"];
                    console.log("url: " + url);
                    _this.imgUrl = url;
                });
            },
          }
        });  
    
        app.start();
    
      // 定义网络请求函数
      function ajax_get(url, callback) {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                // console.log('responseText:' + xmlhttp.responseText);
                try {
                    var data = JSON.parse(xmlhttp.responseText);
                } catch (err) {
                    console.log(err.message + " in " + xmlhttp.responseText);
                    return;
                }
                callback(data);
            }
        };
        xmlhttp.open("GET", url, true);
        xmlhttp.send();
      }
      </script>
    </body>
    
    </html>
    

    总结

    v-bind 经常用于修改class,实现不同的显示状态, 只是单向变动

    对象的方式
    <img v- bind:class="{active:isActive}"></div>
    三目表达式
    <i :class="isPlaying && index == controlItem?'list_menu__icon_pause':'list_menu__icon_play'"></i><span
    

    v-bind和v-model区别:
    https://blog.csdn.net/u011486491/article/details/90232280
    v-bind
    html中的属性、css的样式、对象、数组、number 类型、bool类型
    v-model
    主要是用在表单元素中,它实现了双向绑定。在同事使用v-bind和v-model中,v-model建立的双向绑定对输入型元素input, textarea, select等具有优先权,会强制实行双向绑定。很多时候v-model使用在表单的<input>中实现双向绑定

    源代码参考

    相关文章

      网友评论

          本文标题:vue基础篇

          本文链接:https://www.haomeiwen.com/subject/mnvawctx.html