10天从入门到精通Vue(四)watch、computed属性和nrm的安装使用

101 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第26天,点击查看活动详情

命名视图实现经典布局

  1. 标签代码结构:
<div id="app">
  <router-view></router-view>
  <div class="content">
    <router-view name="a"></router-view>
    <router-view name="b"></router-view>
  </div>
  </div>
  1. JS代码:
<script>
  var header = Vue.component('header', {
    template: '<div class="header">header</div>'
  });
  
  var sidebar = Vue.component('sidebar', {
    template: '<div class="sidebar">sidebar</div>'
  });
  
  var mainbox = Vue.component('mainbox', {
    template: '<div class="mainbox">mainbox</div>'
  });
  
  // 创建路由对象
  var router = new VueRouter({
    routes: [
      {
        path: '/', components: {
          default: header,
          a: sidebar,
          b: mainbox
        }
      }
    ]
  });
  
  // 创建 Vue 实例,得到 ViewModel
  var vm = new Vue({
    el: '#app',
    data: {},
    methods: {},
    router
  });
  </script>
  1. CSS 样式:
<style>
  .header {
    border: 1px solid red;
  }
  
  .content{
    display: flex;
  }
  .sidebar {
    flex: 2;
    border: 1px solid green;
    height: 500px;
  }
  .mainbox{
    flex: 8;
    border: 1px solid blue;
    height: 500px;
  }
  </style>

效果如下: image.png

watch属性的使用

考虑一个问题:想要实现 两个文本框的内容改变,则全名的文本框中的值也跟着改变;

  1. 监听data中属性的改变:
<div id="app">
  <input type="text" v-model="firstName"> +
  <input type="text" v-model="lastName"> =
  <span>{{fullName}}</span>
</div>

<script>
  // 创建 Vue 实例,得到 ViewModel
  var vm = new Vue({
    el: '#app',
    data: {
      firstName: '共饮',
      lastName: '一杯无',
      fullName: '共饮 - 一杯无'
    },
    methods: {},
    watch: {
      'firstName': function (newVal, oldVal) { // 第一个参数是新数据,第二个参数是旧数据
        this.fullName = newVal + ' - ' + this.lastName;
      },
      'lastName': function (newVal, oldVal) {
        this.fullName = this.firstName + ' - ' + newVal;
      }
    }
  });
  </script>
  1. 监听路由对象的改变:
<div id="app">
  <router-link to="/login">登录</router-link>
  <router-link to="/register">注册</router-link>
  
  <router-view></router-view>
</div>

<script>
  var login = Vue.extend({
    template: '<h1>登录组件</h1>'
  });
  
  var register = Vue.extend({
    template: '<h1>注册组件</h1>'
  });
  
  var router = new VueRouter({
    routes: [
      { path: "/login", component: login },
      { path: "/register", component: register }
    ]
  });
  
  // 创建 Vue 实例,得到 ViewModel
  var vm = new Vue({
    el: '#app',
    data: {},
    methods: {},
    router: router,
    watch: {
      '$route': function (newVal, oldVal) {
        if (newVal.path === '/login') {
          console.log('这是登录组件');
        }
      }
    }
  });
  </script>

computed计算属性的使用

  1. 默认只有getter的计算属性:
<div id="app">
  <input type="text" v-model="firstName"> +
  <input type="text" v-model="lastName"> =
  <span>{{fullName}}</span>
</div>

<script>
  // 创建 Vue 实例,得到 ViewModel
  var vm = new Vue({
    el: '#app',
    data: {
      firstName: 'jack',
      lastName: 'chen'
    },
    methods: {},
    computed: { // 计算属性; 特点:当计算属性中所以来的任何一个 data 属性改变之后,都会重新触发 本计算属性 的重新计算,从而更新 fullName 的值
      fullName() {
        return this.firstName + ' - ' + this.lastName;
      }
    }
  });
  </script>
  1. 定义有gettersetter的计算属性:
<div id="app">
  <input type="text" v-model="firstName">
  <input type="text" v-model="lastName">
  <!-- 点击按钮重新为 计算属性 fullName 赋值 -->
  <input type="button" value="修改fullName" @click="changeName">
  
  <span>{{fullName}}</span>
</div>

<script>
  // 创建 Vue 实例,得到 ViewModel
  var vm = new Vue({
    el: '#app',
    data: {
      firstName: 'jack',
      lastName: 'chen'
    },
    methods: {
      changeName() {
        this.fullName = 'TOM - chen2';
      }
    },
    computed: {
      fullName: {
        get: function () {
          return this.firstName + ' - ' + this.lastName;
        },
        set: function (newVal) {
          var parts = newVal.split(' - ');
          this.firstName = parts[0];
          this.lastName = parts[1];
        }
      }
    }
  });
  </script>

watchcomputedmethods之间的对比

  1. computed属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算。主要当作属性来使用;
  2. methods方法表示一个具体的操作,主要书写业务逻辑;
  3. watch一个对象,键是需要观察的表达式,值是对应回调函数。主要用来监听某些特定数据的变化,从而进行某些具体的业务逻辑操作;可以看作是computedmethods的结合体;

nrm的安装使用

作用:提供了一些最常用的NPM包镜像地址,能够让我们快速的切换安装包时候的服务器地址; 什么是镜像:原来包刚一开始是只存在于国外的NPM服务器,但是由于网络原因,经常访问不到,这时候,我们可以在国内,创建一个和官网完全一样的NPM服务器,只不过,数据都是从人家那里拿过来的,除此之外,使用方式完全一样;

  1. 运行npm i nrm -g全局安装nrm包;
  2. 使用nrm ls查看当前所有可用的镜像源地址以及当前所使用的镜像源地址;
  3. 使用nrm use npmnrm use taobao切换不同的镜像源地址;

本文内容到此结束了,

如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。

如有错误❌疑问💬欢迎各位大佬指出。

主页共饮一杯无的博客汇总👨‍💻

保持热爱,奔赴下一场山海。🏃🏃🏃

a37032f76d3ebe77e3e3d265ff1e1d7.jpg