• 前端框架之Vue(1)-第一个Vue实例


    vue官方文档

    知识储备

    es6语法补充

    • let

      使用 var 声明的变量的作用域是全局。

      {
          var a = 1;
      }
      console.info(a); // 1
      例1:
      var arr = [];
      for (var i = 0; i < 10; i++) {
          arr[i] = function(){
              console.info(i);
          }
      }
      arr[6]();// 10
      
      var arr = [];
      for (let i = 0; i < 10; i++) {
          arr[i] = function(){
              console.info(i);
          }
      }
      arr[6]();// 6
      例2:

      let 声明的变量,它的作用域是定义时所在的块内。

      {
          let b = 2;
      }
      console.info(b); // Uncaught ReferenceError: b is not defined
      例:

      let 声明的变量不能重复声明。

      {
          let c = 3;
          let c = 4; // Uncaught SyntaxError: Identifier 'c' has already been declared
      }
      例:
    • const

      const 声明的变量需要立即初始化,不能重新赋值。

      const a = 1;
      a = 2; // Uncaught TypeError: Assignment to constant variable.
      例:
    • 模板字符串

      var a = 1,
          b = 2;
      var str = `a=${a},b=${b}`;
      console.info(str); // a=1,b=2
      例:
    • 箭头函数

      普通函数和箭头函数的定义对比。

      // 普通函数,无参
      var f1 = function(){
          return '123';
      }
      
      // 箭头函数,无参
      var f2 = () => '123';
      console.info(f2()); // 123
      
      // 普通函数,有参
      var f3 = function(a, b) {
          return a;
      }
      // 箭头函数,有参
      var f4 = (a, b) => a + b;
      console.info(f4(1, 2)); // 3
      例:

      普通函数和箭头函数使用 this 的对比。

      var person1 = {
          name: '张三',
          fav: function() {
              // 使用普通函数时,this指向的是当前调用对象。
              console.info(this); // {name: "张三", fav: ƒ}
              console.info(this.name); // 张三
          }
      }
      person1.fav(); 
      
      var person2 = {
          name: '张三',
          fav: () => {
              // 使用箭头函数时,this指向的是定义时所在的变量,在这里也就是window。
              console.info(this); // Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, frames: Window, …}
              console.info(this.name); // (空字符串)
          }
      }
      person2.fav();
      例:

      普通函数和箭头函数使用arguments的对比。

      var func1 = function() {
          console.info(arguments);
      }
      
      func1(1, 2, 3); // Arguments(3) [1, 2, 3, callee: ƒ, Symbol(Symbol.iterator): ƒ]
      
      // 使用箭头函数时,arguments不能使用。
      var func2 = () => {
          console.info(arguments);
      }
      
      func2(1, 2, 3); // Uncaught ReferenceError: arguments is not defined
      例:
    • 对象的单体模式

      var person1 = {
          name: '张三',
          fav: function() {
              console.info(this); 
              console.info(this.name); 
          }
      }
      // person2.fav等价于person1.fav
      var person2 = {
          name: '张三',
          fav() {
              console.info(this); // {name: "张三", fav: ƒ}
              console.info(this.name); // 张三
          }
      }
      
      person2.fav()
      例:
    • 面向对象

      // 构造函数创建对象
      function Animal1(name,age) {
          this.name = name;
          this.age = age;
      }
      Animal1.prototype.showName= function(){
          console.info(this.name);
      }
      
      var dog1 = new Animal1('小黄',3);
      console.info(dog1); // Animal1 {name: "小黄", age: 3}
      dog1.showName(); // 小黄
      
      // class创建对象
      class Animal2{
          constructor(name,age){
              this.name = name;
              this.age = age;
          }
          showName(){
              console.info(this.name);
          }
      }
      
      var dog2 = new Animal2('小黑',2);
      console.info(dog2); // Animal2 {name: "小黑", age: 2}
      dog2.showName(); // 小黑
      例:

    npm操作

    • 初始化

      npm init
    • 安装模块

      以安装 jquery 为例:

      npm install jquery@[版本号,不写默认最高版本] --save
      npm install jquery@[版本号,不写默认最高版本] --save-dev #保存开发版本
      如果 install 失败,可先尝试 rebuild 操作如下:
      npm rebuild
    • 卸载模块

      以卸载 jquery 为例:

      npm uninstall jquery
    • 安装cnpm

      $ npm install -g cnpm --registry=https://registry.npm.taobao.org

    Vue实例

    创建一个Vue实例

    每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的:

    var vm = new Vue({
      // 选项
    })

    当一个 Vue 实例被创建时,它向 Vue 的响应式系统中加入了其  data 对象中能找到的所有的属性。当这些属性的值发生改变时,视图将会产生“响应”,即匹配更新为新的值。

    // 我们的数据对象
    var data = { a: 1 }
    
    // 该对象被加入到一个 Vue 实例中
    var vm = new Vue({
      data: data
    })
    
    // 获得这个实例上的属性
    // 返回源数据中对应的字段
    vm.a == data.a // => true
    
    // 设置属性也会影响到原始数据
    vm.a = 2
    data.a // => 2
    
    // ……反之亦然
    data.a = 3
    vm.a // => 3

    当这些数据改变时,视图会进行重渲染。值得注意的是只有当实例被创建时 data 中存在的属性才是响应式的。也就是说如果你添加一个新的属性,比如:

    vm.b = 'hi'

    那么对 b 的改动将不会触发任何视图的更新。如果你知道你会在晚些时候需要一个属性,但是一开始它为空或不存在,那么你仅需要设置一些初始值。比如:

    data: {
      newTodoText: '',
      visitCount: 0,
      hideCompletedTodos: false,
      todos: [],
      error: null
    }

    这里唯一的例外是使用  Object.freeze() ,这会阻止修改现有的属性,也意味着响应系统无法再追踪变化。

    var obj = {
      foo: 'bar'
    }
    
    Object.freeze(obj)
    
    new Vue({
      el: '#app',
      data: obj
    })
    <div id="app">
      <p>{{ foo }}</p>
      <!-- 这里的 `foo` 不会更新! -->
      <button v-on:click="foo = 'baz'">Change it</button>
    </div>

    除了数据属性,Vue实例还暴露了一些有用的实例属性与方法。它们都有前缀  $ ,以便与用户定义的属性区分开来。例如:

    var data = { a: 1 }
    var vm = new Vue({
      el: '#example',
      data: data
    })
    
    vm.$data === data // => true
    vm.$el === document.getElementById('example') // => true
    
    // $watch 是一个实例方法
    vm.$watch('a', function (newValue, oldValue) {
      // 这个回调将在 `vm.a` 改变后调用
    })

    实例生命周期钩子

    每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。

    比如 created 钩子可以用来在一个实例被创建之后执行代码:

    new Vue({
      data: {
        a: 1
      },
      created: function () {
        // `this` 指向 vm 实例
        console.log('a is: ' + this.a)
      }
    })
    // => "a is: 1"

    也有一些其它的钩子,在实例生命周期的不同阶段被调用,如  mounted 、 updated  和  destroyed 。生命周期钩子的  this 上下文指向调用它的 Vue 实例。

    注意:不要在选项属性或回调上使用箭头函数,比如  created: () => console.log(this.a)  或  vm.$watch('a', newValue => this.myMethod()) 。因为箭头函数是和父级上下文绑定在一起的, this 不会是如你所预期的 Vue 实例,经常导致  Uncaught TypeError: Cannot read property of undefined 或  Uncaught TypeError: this.myMethod is not a function 之类的错误。

    生命周期图示

    下图展示了实例的生命周期。你不需要立马弄明白所有的东西,不过随着你的不断学习和使用,它的参考价值会越来越高。

  • 相关阅读:
    【算法】一致性Hash算法
    P1576 最小花费 题解
    Vijos1234 口袋的天空 题解
    P1379 八数码难题 题解
    Tarjan求无向图必经点 笔记
    P3372 【模板】线段树 1 题解
    CF1332A Exercising Walk 题解
    P6270 [SHOI2002]取石子游戏 题解
    P6269 [SHOI2002]空中都市 题解
    P6268 [SHOI2002]舞会 题解
  • 原文地址:https://www.cnblogs.com/zze46/p/9988179.html
Copyright © 2020-2023  润新知