Vue学习笔记

第一节:##

1.下载Vue2.0的两个版本: ##3

官方网站:http://vuejs.org/

  • 开发版本:包含完整的警告和调试模式
  • 生产版本:删除了警告,进行了压缩

2.项目结构搭建:

Vue学习笔记_第1张图片
image.png

3、live-server使用

用npm进行全局安装
npm install live-server -g

在项目目录中打开
live-server

4、编写第一个HelloWorld代码

    
    
            
            
            Helloworld
    
              

HelloWorld


{{message}}

第二节:v-if v-else v-show 指令

1.v-if:

v-if:是vue 的一个内部指令,指令用在我们的html中。
v-if用来判断是否加载html的DOM,比如我们模拟一个用户登录状态,在用户登录后现实用户名称。
关键代码:

你好,欢迎Joey
请登录!

2、v-show :

调整css中display属性,DOM已经加载,只是CSS控制没有显示出来。

你好:JSPang

3、v-if 和v-show的区别:

  • v-if: 判断是否加载,可以减轻服务器的压力,在需要时加载。
  • v-show:调整css dispaly属性,可以使客户端操作更加流畅。

第三节:v-if v-else v-show 指令

v-for指令是循环渲染一组data中的数组,v-for 指令需要以 item in items 形式的特殊语法,items 是源数据数组并且item是数组元素迭代的别名。

1、基本用法:

模版写法

  • {{item}}
  • js写法

      var app = new Vue({
              el:'#app',
              data:{
                      items:[20,23,18,65,32,19,54,56,41]
              }
      })
    
    

    完整代码

    
    
    
        
        
        V-for 案例
    
    
        

    v-for指令用法


    • {{item}}

    这是一个最基础的循环,先在js里定义了items数组,然后在模板中用v-for循环出来,需要注意的是,你需要那个html标签循环,v-for就写在那个上边。

    2、排序 :

    我们已经顺利的输出了我们定义的数组,但是我需要在输出之前给数组排个序,那我们就用到了Vue的computed:属性。

      computed:{
              sortItems:function(){
                       return this.items.sort();
          }
      }
    

    我们在computed里新声明了一个对象sortItems,如果不重新声明会污染原来的数据源,这是Vue不允许的,所以你要重新声明一个对象。

    如果不重新声明报错:

    image.png

    如果一切顺利的话,你已经看到了结果,但是这个小程序还是有个小Bug的,现在我把数组修改成这样。

       items:[20,23,18,65,32,19,5,56,41]
    

    我们把其中的54修改成了5,我们再看一下结果,发现排序结果并不是我们想要的。

    Vue学习笔记_第2张图片
    image.png

    我们可以自己编写一个方法sortNumber,然后传给我们的sort函数解决这个Bug。

       function sortNumber(a,b){
                return a-b
        }
    
    

    用法:

      computed:{
            sortItems:function(){
              return this.items.sort(sortNumber);
           }
      }
    

    经过一番折腾,我们终于实现了真正的数字排序,这是在工作中非常常用的,一定要学好,记住。

    3、对象循环输出

    我们上边循环的都是数组,那我们来看一个对象类型的循环是如何输出的。

    我们先定义个数组,数组里边是对象数据

      students:[
                {name:"Joey",age:26},
                {name:"Cpp",age:20},
                {name:"Clother",age:16}
            ]
    

    在模板中输出

    • {{student.name}} - {{student.age}}

    加入索引序号:

    • {{index}}:{{student.name}} - {{student.age}}

    排序,我们先加一个原生的对象形式的数组排序方法:

    //数组对象排序方法
    function sortByKey(arry,key){
           return arry.sort(function(a,b){
                 var x=a[key];
                 var y=b[key];
                 return ((xy)?1:0));
          })
      }
    

    有了数组的排序方法,在computed中进行调用排序

     sortStudent:function(){
              return sortByKey(this.students,'age');
      }
    

    注意: vue低版本中 data里面的items和computed里面可以一样,但是高版本,是不允许相同名称。

    第四节:v-text & v-html

    我们已经会在html中输出data中的值了,我们已经用的是{{xxx}},这种情况是有弊端的,就是当我们网速很慢或者javascript出错时,会暴露我们的{{xxx}}。Vue给我们提供的v-text,就是解决这个问题的。我们来看代码:

    {{ message }}=

    双大括号会将数据解释为纯文本,而非HTML。为了输出真正的HTML,你就需要使用v-html 指令。

    需要注意的是:在生产环境中动态渲染HTML是非常危险的,因为容易导致XSS攻击。所以只能在可信的内容上使用v-html,永远不要在用户提交和可操作的网页上使用。
    完整代码:

    
    
    
      
      
      
      v-text & v-html 
      
    
    
        

    v-text & v-html


    {{ message }}=

    第五节:v-on:绑定事件监听器

    v-on 就是监听事件,可以用v-on指令监听DOM事件来触发一些javascript代码。

    1.使用绑定事件监听器,编写一个加分减分的程序。

    效果如图:


    Vue学习笔记_第3张图片
    效果图

    程序代码:

    
    
    
      
      
      
      v-on 实例
      
    
    
        

    v-on 实例


    本场比赛得分:{{fenshu}}


    我们的v-on 还有一种简单的写法,就是用@代替。

    我们除了绑定click之外,我们还可以绑定其它事件,比如键盘回车事件v-on:keyup.enter,现在我们增加一个输入框,然后绑定回车事件,回车后把文本框里的值加到我们的count上。
    因为文本框的数字会默认转变成字符串,所以我们需要用parseInt()函数进行整数转换。
    你也可以根据键值表来定义键盘事件::

    Vue学习笔记_第4张图片
    键盘表

    第六节:v-model指令

    v-model指令,我理解为绑定数据源。就是把数据绑定在特定的表单元素上,可以很容易的实现双向数据绑定。

    1.一个最简单的双向数据绑定代码。

    html文件:

    原始文本信息:{{message}}

    文本框

    v-model:

    javascript代码:

    var app=new Vue({
      el:'#app',
      data:{
           message:'hello Vue!'
      }
     })
    

    2.修饰符

    • .lazy:取代 imput 监听 change 事件。
    • .number:输入字符串转为数字。
    • .trim:输入去掉首尾空格。

    3.文本区域加入数据绑定

    
    

    4.多选按钮绑定一个值

    多选按钮绑定一个值

    5.多选绑定一个数组

    多选框绑定一个数组

    {{web_names}}

    6.单选按钮绑定数据

    单选框绑定

    你选择的性别是:{{sex}}

    第七节:v-bind 指令

    v-bind是处理HTML中的标签属性的,例如

    就是一个标签,也是一个标签,我们绑定上的src进行动态赋值。
    html文件:

    在html中我们用v-bind:src="imgSrc"的动态绑定了src的值,这个值是在vue构造器里的data属性中找到的。
    js文件:

    var app=new Vue({
        el:'#app',
        data:{
              imgSrc:'http://baidu.com/wp-content/uploads/2017/02/vue01-2.jpg'
         }
    })
    

    我们在data对象在中增加了imgSrc属性来供html调用。

    ** v-bind 缩写 **

    
    
    
    
    

    ** 绑定CSS样式 **

    在工作中我们经常使用v-bind来绑定css样式:

    在绑定CSS样式是,绑定的值必须在vue中的data属性中进行声明。

    1. 直接绑定class样式
    1、绑定classA
    1. 绑定classA并进行判断,在isOK为true时显示样式,在isOk为false时不显示样式。
    2、绑定class中的判断
    1. 绑定class中的数组
    3、绑定class中的数组
    1. 绑定class中使用三元表达式判断
    4、绑定class中的三元表达式判断
    1. 绑定style
    5、绑定style
    1. 用对象绑定style样式
    6、用对象绑定style样式
    var app=new Vue({
       el:'#app',
       data:{
           styleObject:{
               fontSize:'24px',
               color:'green'
                }
            }
    })
    

    第八节:其他内部指令(v-pre & v-cloak & v-once):##

    1. v-pre指令
      在模板中跳过vue的编译,直接输出原始值。就是在标签中加入v-pre就不会输出vue中的data值了。
    {{message}}
    1. v-cloak指令
      在vue渲染完指定的整个DOM后才进行显示。它必须和CSS样式一起使用,
    [v-cloak] {
      display: none;
    }
    
    {{ message }}
    1. v-once指令
      在第一次DOM时进行渲染,渲染完成后视为静态内容,跳出以后的渲染过程。
    第一次绑定的值:{{message}}

    小知识点:

    1.终止批处理操作退出快捷键

       ctrl + c 
    

    2. 几种实现双向绑定的做法

    发布者-订阅者模式(backbone.js)
    脏值检查(angular.js)
    数据劫持(vue.js)

    发布者-订阅者模式: 一般通过sub, pub的方式实现数据和视图的绑定监听,更新数据方式通常做法是 vm.set('property', value),这里有篇文章讲的比较详细,有兴趣可点这里

    这种方式现在毕竟太low了,我们更希望通过 vm.property = value这种方式更新数据,同时自动更新视图,于是有了下面两种方式

    脏值检查: angular.js 是通过脏值检测的方式比对数据是否有变更,来决定是否更新视图,最简单的方式就是通过 setInterval() 定时轮询检测数据变动,当然Google不会这么low,angular只有在指定的事件触发时进入脏值检测,大致如下:

    • DOM事件,譬如用户输入文本,点击按钮等。( ng-click )

    • XHR响应事件 ( $http )

    • 浏览器Location变更事件 ( $location )

    • Timer事件( $timeout , $interval )

    • 执行 $digest() 或 $apply()

    数据劫持: vue.js 则是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的settergetter,在数据变动时发布消息给订阅者,触发相应的监听回调。

    思路整理:

    已经了解到vue是通过数据劫持的方式来做数据绑定的,其中最核心的方法便是通过Object.defineProperty()来实现对属性的劫持,达到监听数据变动的目的,无疑这个方法是本文中最重要、最基础的内容之一,如果不熟悉defineProperty,猛戳这里
    整理了一下,要实现mvvm的双向绑定,就必须要实现以下几点:
    1、实现一个数据监听器Observer,能够对数据对象的所有属性进行监听,如有变动可拿到最新值并通知订阅者
    2、实现一个指令解析器Compile,对每个元素节点的指令进行扫描和解析,根据指令模板替换数据,以及绑定相应的更新函数
    3、实现一个Watcher,作为连接Observer和Compile的桥梁,能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数,从而更新视图
    4、mvvm入口函数,整合以上三者

    你可能感兴趣的:(Vue学习笔记)