vue基础篇

本人是一名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>中实现双向绑定

源代码参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容

  • Vue 基础篇 一、框架与库的区别 JQ库->DOM(DOM操作) + Ajax请求 art-template库-...
    CN_yang阅读 580评论 0 7
  • 本教程分为三部分 : 基础 进阶 实战 ,深入浅出Vue.基础篇持续 更新中 --- vue.js的基本介绍和...
    缺月楼阅读 269评论 0 3
  • 本章内容:认识 Vue.js、数据绑定、计算属性、内置指令 一、初始 Vue.js 1.1 Vue.js 是什么 ...
    了凡和纤风阅读 5,616评论 0 13
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,207评论 0 6
  • 第四章 v-­bind以及class与style的绑定 应用场景: DOM 元素经常会动态地绑定一些 class类...
    缺月楼阅读 440评论 0 2