北风网-Vue.js 学习笔记(1)

第一章、Vue.js介绍

 

第3节视频:Vue.js的构造器和扩展

一、Vue.js的构造器

  1、每个Vue.js应用都是通过构造函数Vue 创建一个根实例。

    var vm = new Vue({

      //选项

    });

  二、在实例化Vue 时,需要传入一个JSON 对象,它可以包含数据、模板、挂载元素、方法、回调函数等选项,全部的选项可以在API文档中查看。

   1、Vue 的构造器可以被扩展使用,这样就免去了重复定义构造器的很多内容。

    var MyVue = Vue.extend({

      //扩展选项

    });

    

    var app = new MyVue({

      //选项

    });

 

第4节视频:Vue实例的属性

   一、每个 Vue 实例都会代理其 data 对象里所有的属性。如果实例创建之后添加或者更改属性,它不会触发视图更新。

    栗子:

      视图层:

       <p> {{ username }}</p>

       <p>{{ sex }}</p>

      控制器和模型层:

        var app = new Vue({

          el: "#app";

          data: {

            username: "Scott"

          },

          ready: function(){

            this.sex = "male"

          }

        });

        app.username = "Jack";

    注意:在实例创建完成之前,app对象是可以修改属性,一旦实例创建完成,app对象的属性就无法更改;

  二、除了data 属性,Vue实例暴露了一些有用的实例属性与方法,这些属性与方法都有前缀$。

    栗子:

      var app = new Vue({

        el: "#app",

        data: {

          username : "Scott"

        }

      });

      console.log(app.username);

      console.log(app.$data.username); //$data属性是所有绑定数据的代理

      console.log(app.$el == document.getElementById("app"));

第五节视频:Vue实例的生命周期

  

       

  

第6节视频:计算属性(Computed)

  一、视图层的表达式是非常便利的输出手段,但是它们实际上只用于简单的运算。在模板中放入太多的逻辑会让表达式过重且难以维护。例如:

    <div id = “example”>

      {{ message.split('').reverse().join('') }}

    </div>

  二、在这种情况下,模板不再简单和清晰。对于任何复杂逻辑,你都应当使用计算属性。

  三、计算属性就是在模板中调用函数输出结果。

    视图层:

      <input type = "text" v-model = "salary" >

      <p>{{ calculateTax }}</p>

      <p v-text = "calculate" ></p> //函数调用

    控制器和模型层:

      computed: {

        calculateTax: function(){

          var base = 3500;

          var temp = this.salary - base;

          var tax = 0;

          if(temp > 0 && temp <= 1500) {

            tax = temp * 0.03 - 0;

          } else if (temp >1500 && temp <= 4500){

            tax = temp * 0.10 - 105;

          }

          ....

          return Math.floor( tax * 100 ) / 100 ;

        }

      }

 

第7节视频:计算属性的案例

      

第8节视频:方法调用

  一、方法调用

    1、调用methods中的函数也能实现相同的结果。

      视图层:

        <input type = "text" v-model = "salary">

        <p>{{ calculateTax() }}</p>

        <p v-text = "calculateTax() " ></p>//函数调用

      控制器和模型层:

        methods:{

          calculateTax: function(){

            var base = 3500;

            var temp = this.salary - base;

            var tax = 0;

            if(temp >0 && temp <= 1500){

              tax = temp * 0.03 - 0 ;

            } else if(){

              tax = temp * 0.10 - 105;

            }

            ...

            return Math.floor(tax * 100 ) / 100;

          }

        }

    2、计算缓存

      上个栗子中,计算属性和函数,两者最终结果相同。然而不同的是,计算属性是基于缓存的,计算属性只有在它的相关依赖发生改变时,才会重新求值;函数恰好相反,它是没有缓存的。

    3、计算属性与方法调用的对比

    视图层:

    <p><input type = "button" value = "添加" @click = "add"></p>

    <p v-for = "one in list">{{ now }}</p>//调用计算属性

    <p v-for = "one in list">{{ now() }}</p>//调用方法

 

    计算属性:

    data: {

      list: []

    },

    methods:{

      add: function(){

        this.list.push("OK");  

      }

    },

    computed: {

      now: function(){

        now: function(){

          return new Data().toLocaleString();

        }

      }

    }

    

    调用方法:

    data:{

      list:[]

    },

    methods:{

      add: function(){

        this.list.push("OK");

      },

      now: function (){

        return new Data().toLocaleString();

      }

    }

    

 

第9节视频:观察属性

  一、Vue提供了watch属性这种更通用的方式来观察和响应实例上的数据变动。

    1、watch 属性的回调函数没有返回值,回调函数可以执行一些复杂的任务,比如绘制图形等。

    2、watch 属性没有返回值,所以不适合在表达式中使用。

  栗子:

    <canvas id = "test" width = "300" height = " 300" ></canvas>

    data:{

      r:0

    },

    watch: {

      r: function ( newValue, oldValue) {

        var c = document.getElementById("test");

        var ctx = c.getContext("2d");

        ctx.beginPath();

        ctx.clearRect(0,0,300,300);

        ctx.lineWidth = 5;

        ctx.strokeStyle = "red";

        ctx.arc(100,100,newValue,0,360*Math.PI/180);

        ctx.stroke();

      }

    }

 

第10节视频:文本插值

  模板语法:文本插值

  Vue模板语法:

  一、Vue.js使用了基于HTML的模板语法,在应用状态改变时,Vue 能够重新渲染组件并应用到DOM上面。

  writer.writer("<html>");

  writer.writer("<body>");

  writer.writer("<h1>Hello," + username +"</h1>");

  writer.writer("</body>");

  writer.writer("</html>");

  writer.close();

  

   二、文本插值

    1、数据绑定最常见的形式就是使用双大括号的文本插值。如果数据对象上username 属性发生了改变,插值处的内容就会更新。

    2、插值是单向绑定,数据对象发生变化会体现在插值上,但是插值变化不会体现在数据对象上面。

   <div id ="app">

     <p>{{username}}</p>

   </div> 

  模型层:

    data: {

      username: "Scott"

    }

  

    3、使用双大括号插值,如果Vue 没有完成对页面的渲染,用户是会短暂看到插值表达式的,解决这个问题可以使用 v-text 指令。从体验上来说,推荐使用 v-text 指令。

    <div id = "app">

      <p v-text = "username"></p>

    </div>

     4、通过使用 v-once 指令,你也能执行一次性地插值,当数据改变时,插值处的内容不会更新。

    <div id = "app">

      <p><input type = "text" v-model = "username"></p>

      <p><span v-once>Hello,{{ username}}</span></p>

    </div>

    <....... v-model ="username">  <----双向绑定------->data:{

                                username: "Scott"

                              }

    

第11节视频:HTML插值

     模板语法:HTML插值

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

     <div id = "app">

       <div v-html = "content"></div>

     </div>

  

     data: {

      content: ' <a href = "http://www.baidu.com">百度首页</a>'

     }

     2、被插入的内容都会被当作HTML,数据绑定会被忽略。

      <div id = "app">

        <div v-html = "content"></div>

      </div>

      

      data:{

         content:'<a href = "{{url}}">百度首页</a>'

      }

      3、只对可信内容使用HTML插值,绝不要对用户提供的内容插值,除非对内容过滤,否则很容易引起XSS攻击。

    data:{

      article:"<a href = 'javascript:alert(1)'>抽奖</a>"

    }

      

第12节视频:属性插值和表达式

     模板语法:属性插值和表达式

  一、属性插值

    1、如果要对HTML元素属性插值,应该使用 v-bind 指令。

    <input type = "button" value = "报名" v-bind:disabled = "age<18" v-bind:class = "btn">

    

    data:{

      username: "Scott",

      age: 22,

      btn:"red-button"

    }

    2、在模板中,我们一直都只绑定简单的属性键值。但实际上,对于所有的数据绑定,Vue.js 都提供了完全的JavaScript表达式支持。

    <p>{{username.slice(0,3)}}</p>

    <p>{{Math.round(salary/22)}}</p>

    <p>{{sex == "male" && age >= 18}}</p>

    <p v-bind:class = "sex == 'female' ? 'pink' : 'blue' ">Hello</p>

      <p>{{ var a = 1 }}</p>

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

  

    

 

posted @ 2017-10-21 22:11  一纸流年  阅读(360)  评论(0编辑  收藏  举报