zoukankan      html  css  js  c++  java
  • 前端框架之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 之类的错误。

    生命周期图示

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

  • 相关阅读:
    (引)spring学习笔记1.什么是控制反转
    Arduino 各种模块篇 步进电机 step motor 舵机 servo 直流电机 总复习
    Raspberry Pi Wireless Adaptor
    Pyramid 使用总结1
    Arduino 各种模块篇 人体红外感应模块 proximity sensor
    Pyramid 使用总结2
    Webcam Streaming Desktop Recording on Linux for ubuntu or its destros
    Arduino 各种模块篇 步进电机 step motor( 不用库,不用shield, 纯)
    Arduino 各种模块篇 motor shield 电机扩展板(舵机、直流电机、步进电机party)
    转载 stepper motors
  • 原文地址:https://www.cnblogs.com/zze46/p/9988179.html
Copyright © 2011-2022 走看看