實現經典佈局就靠這招了

本文標識 :  V00016
javascript

本文編輯 :  Jack 風
編程工具 :  Vscode
閱讀時長 :  8分鐘css

命名視圖實現經典佈局


1. 標籤代碼結構:java

<div id="app">
    <router-view></router-view>
    <div class="content">
      <router-view name="a"></router-view>
      <router-view name="b"></router-view>
    </div>
  </div>


2. JS代碼:web

<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>


3. CSS 樣式:編程

  <style>
    .header {
      border1px solid red;
    }

    .content{
      display: flex;
    }
    .sidebar {
      flex2;
      border1px solid green;
      height500px;
    }
    .mainbox{
      flex8;
      border1px solid blue;
      height500px;
    }
  
</style>

`watch`屬性的使用

考慮一個問題:想要實現 `名` 和 `姓` 兩個文本框的內容改變,則全名的文本框中的值也跟着改變;(用之前的知識如何實現???)微信


1. 監聽`data`中屬性的改變:app

<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'風',
        fullName'jack - 風'
      },
      methods: {},
      watch: {
        'firstName'function (newVal, oldVal// 第一個參數是新數據,第二個參數是舊數據
          this.fullName = newVal + ' - ' + this.lastName;
        },
        'lastName'function (newVal, oldVal{
          this.fullName = this.firstName + ' - ' + newVal;
        }
      }
    });
  
</script>


2. 監聽路由對象的改變:ide

<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'風'
      },
      methods: {},
      computed: { // 計算屬性; 特色:當計算屬性中因此來的任何一個 data 屬性改變以後,都會從新觸發 本計算屬性 的從新計算,從而更新 fullName 的值
        fullName() {
          return this.firstName + ' - ' + this.lastName;
        }
      }
    });
  
</script>


2. 定義有`getter``setter`的計算屬性:佈局

<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'風'
      },
      methods: {
        changeName() {
          this.fullName = 'TOM - chen2';
        }
      },
      computed: {
        fullName: {
          getfunction ({
            return this.firstName + ' - ' + this.lastName;
          },
          setfunction (newVal{
            var parts = newVal.split(' - ');
            this.firstName = parts[0];
            this.lastName = parts[1];
          }
        }
      }
    });
  
</script>


 watch、computed和methods之間的對比


期待一塊兒成長

在看和轉發

都是一種支持


本文分享自微信公衆號 - DataScience(DataScienceTeam)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索