Vue — 入门基础

Vue简介:Vue.js (读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,它不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与单文件组件Vue 生态系统支持的库结合使用时,Vue 也完全能够为复杂的单页应用程序提供驱动。

Vue官方下载地址:https://vuejs.org/v2/guide/installation.html
下载之后,我们只需要在需要用Vue的html页面引入vue.js即可

      <script src="vue.js"></script>

1.基本语法:

1、声明数据选入dom系统;
2、js中定义相关作用域
说明:只有在id=app中的节点才能获取Vue的数据,需要在script里new一个Vue对象,el是控制区域的id名,data中放的的定义的数据,文本插值用“{{}}”包裹,{{}}内可以是一些简单的逻辑计算,v开头的是指令.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test</title>
    <script type="text/javascript" src="jquery.js" ></script>
    <script type="text/javascript" src="vue.js" ></script>
</head>
<body>
    <div id="app">
        {{ message }}
        <br>
        {{ 3+1 }}
        <!-- v-text -->
        <div v-text="vtext"></div>
        <!-- html可以解析标签-->
        <div v-html="vhtml"></div>
    </div>
</body>
<script>
    new Vue({
        el:"#app",
        data:{
            message:"我是测试数据",
            vtext:"我是text文本",
            vhtml:"<h1>我是html文本</h1>"
        }
    })
</script>
</html>

运行结果


显示message数据.png

1.1 表达式,文本插值:“{{}}”,表达式内可以用一些简单的逻辑

    {{ message }}
    {{ 3+1 }}

1.2 指令 :指令以v作为开头;指令内部提供类js环境

(1) . v-text,v-html都是将数据显示

   <div v-text="vtext"></div>
   <div v-html="vhtml"></div>

(2) . 条件:v-if是否显示(如果is_show为false,该div就不显示)

  <div v-if="is_show">显示了div</div>
  <p v-if="num==1">num==1</p>
  <p v-else-if="num==2">num==2</p>
  <p v-else>num等于其他</p>

(3) . 循环:v-for循环(可以循环数组,也可以循环对象)v-for比v-if的优先级更高

    1.通过关键字”in”来循环:v-for="(v,k) in mydata"
    <!--索引是为了在操作数据后,定位找到数据-->
      <li v-for="(v,k) in arr">
          姓名是{{v.name}},年龄是{{v.age}}索引是{{k}}
     </li>
    2.通过关键字“of”来循环:
     <li v-for="(v,k) of arr">
            姓名是{{v.name}},年龄是{{v.age}}索引是{{k}}
    </li>
    <!--只有对象有第三个参数index,数组没有-->
    <li v-for="(v,k,index) in obj">
         键名是{{k}},键值是{{v}}索引是{{index}}
    </li>

(4) . v-on来绑定事件(简写是用:“@”):js里通过methods来定义事件(点击事件v-on:click)
通过this来获取到数据;

      <button v-on:click="sub">vue点击{{message}}</button>
      <script>
           new Vue({
                el:"#app",
                data:{
                    message:"<h1>你好 hello word</h1>",
                     judge:false,
                    str:"没有值",
                    is_show:true,
                    num:2,
                    //不能检测数组的改变,可以改变检测对象
                    arr:[{name:"张三",age:19},{name:"李四",age:12},{name:"王五",age:13}],
                    obj:{name:"张三",age:19},
                },
               methods:{
                    sub(){
                          this.message = "你好世界";
                      }
                }
        })
    </script>

(5) . v-bind用来绑定属性(简写用“:”)

//如果idName为true,则该div的id名为myid否则没有,注意字符串问题,外面是双引号,里面需要是单引号
<div v-bind:id="idName?'myid':' '">哈哈</div>

(6) . v-model:实现数据的双向绑定,可以用于复选框,v-model的值就是value的值,mvvm框架 m:module,v:view,vm:viewModule

爱好: <input type="checkbox" v-model="users.hobby" value="篮球">篮球
       <input type="checkbox" v-model="users.hobby" value="足球">足球
       <input type="checkbox" v-model="users.hobby" value="羽毛球">羽毛球
<script>
new Vue({
        el:"#app",
        data:{
            message:"我是message数据",
            users:{
                username:"",
                sex:"男",
                // hobby需要是一个数组
                hobby:[],
                city:"上海"
            }
        },
})
</script>

(7) . 修饰符:.prevent(阻止默认事件),a不会跳转

<a v-on:click.prevent="test" href="http://www.baidu.com">点击到百度</a>

2.计算属性和观察者(表达式中可以放一些简单逻辑(设计的初衷是为了简单计算)但复杂的逻辑应该放在计算属性里面,而且计算属性可以实时动态更新)

注意:计算属性逻辑只执行一次,不需要触发的方法能放在计算属性里面,不要放在methods里面,计算属性有缓存比较节约性能,观察者实时监测,比较消耗性能。
(1) . computed

html代码
<!--计算属性computed,反转字符串-->
在input框里面输入的字符,在外面会反转显示
反转字符串 <input type="text" v-model="reverseStr">{{ myreverseStr }}
js代码
computed:{
    nameReverse:function () {
        return this.reverseStr.split("").reverse().join("");
    }
}

(2) . 计算属性提供geter/setter方法,默认会有get方法,当改变值的时候触发set方法:

     <!--计算属性computed,反转字符串-->
      反转字符串 <input type="text" v-model="reverseStr">{{ myreverseStr }}
      computed:{
         myreverseStr:{
                get:function(){
                    return this.reverseStr.split("").reverse().join("");
                    console.log("执行了get方法");
                },
                set:function(value){
                    //改变自己需要过滤的属性,不能改变自身,会死循环
                    this.reverseStr = value;
                }
            }
      }

(3) . watch

html代码
在input框里面输入的字符,在外面会实时显示
 watch监控 <input type="text" v-model="watchstr">{{watchstr}}
js代码
        watch:{
            watchstr:function(newValue,oldValue){
                console.log("新的值:"+newValue);
                console.log("旧的值:"+oldValue);
            }
        }

3.css和style绑定:v-bind

v-bind:class可以和普通的class来结合使用;里面提供类js的环境可以处理一些简单逻辑;
(1) . v-bind:style

HTML:
<div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
Js:
data: {
  activeColor: 'red',
  fontSize: 30
}

(2) .style 数组语法

HTML:
 <!--动态样式一定要是对象-->
<div :style="[style1,style2]"></div>
Js:
data:{
            style1:{width:"100px",height:"50px"},
            style2:{background:"green"},
}

4.Key属性:当切换相同dom节点时候,vue会复用节点,如果想让节点在渲染时候也被替换掉的话可以加上key属性;

  <!--key值的运用-->
        <button @click="is_show=!is_show">点击我切换姓名/年龄</button><br>
        <template v-if="is_show">
            <!--没有加Key  还是只读取之前的节点,没变input框,只改了placeholder-->
            <!--加上key唯一标识符,input框切换了-->
            姓名:<input type="text" placeholder="请输入姓名" key="1"><br>
        </template>
        <template v-else>
            年龄:<input type="text" placeholder="请输入年龄" key="2">
        </template>

5. 输入表单修饰符

        lazy : 相当于change事件
        姓名: <input type="text" v-model.lazy="mytext">{{ mytext }}
        number 过滤只能是数字,但是一开始必须是数组
        姓名: <input type="text" v-model.number="mytext1">{{ mytext1 }}
        trim去首位空格
        姓名: <input type="text" v-model.trim="mytext1">{{ mytext1 }}
        多个修饰符连用
        姓名: <input type="text" v-model.trim.lazy="mytext1">{{ mytext1 }}

6. 数组改变html中不能更新,需要特殊设置

//解决方案一
//this.myarr是数组,0是下标,后面是新数据
Vue.set(this.myarr,0,{name:"set修改",age:1});
//解决方案二
在0下标删除一个,再添加一个
 this.myarr.splice(0,1,{name:"splice修改",age:1});

7. ref 获取节点 , event传参

html:
<!--ref拿节点-->
     <div class="mydiv" ref="myel">
            我的div
     </div>
     <div class="mydiv" ref="myel">
            我的div
    </div>
<!--myfn加了括号myfn(),就没有默认的event-->
<!--解决方法 $event  1是传的参数-->
<button @click="myfn($event,1)" >点击我触发函数</button>
js:
 methods:{
            myfn:function(event,str){
                console.log(event,str);
                var el =  this.$refs['myel'];
                console.log(el);
            },

9. ajax请求

html:
 <p v-for="(v,k) in productList">{{v.productName}}</p>
js:
//生命周期 加载完了
data:function(){
            return{
                message:"我是message测试数据",
                productList:[]
            }
        },
   mounted(){
       $.ajax({
          type:"get",
          url:"data/cart.json",
          success:(res)=>{
               //拿不到this
               //箭头语法this穿透
               //数据优先,通过数据控制视图,没有数据控件,循环添加数据
                 console.log(res.result.productList);
                 this.productList = res.result.productList;
          }
     })
 },

总结

v-text 和 v-html区别

v-html可以解析标签

v-show和v-if区别:

V-show通过改变css来切换,开销更小,v-if是真正的渲染节点,性能消耗大;(操作频繁的用v-show,操作较少的用v-if)

keep-alive标签:会把相同的东西存入缓存

我的博客链接

更多资源就在我的gitHubhttps://github.com/huzixian2017/huzixian2017.github.io

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