[SpringBoot+VueJs] 3.3 VueJs的一些基礎知識

目錄

  1. 環境搭建
  2. 后端
    2.1 數據庫設計
    2.2 SpringBoot + Mybatis
    2.3 SpringBoot+RestfulAPI
  3. 前端
    3.1 VueJS 2.0 + Webpack工程介紹
    3.2 Admin-LTE介紹及使用
    3.3 VueJS一些基礎知識
    3.4 項目中用到的和VueJS的開源組件

前言

總結了一些VueJs的基礎知識,方便后面寫代碼的時候有概念。
說實話,我從最早的那種響應式的頁面開發經驗,跳轉到這里還是稍微花了點時間的。
因為最早的形式就是后端返回HTML/FTL,瀏覽器展示。

也就意味著有N個頁面要維護。
而類似于Vue.js, AngularJs等MVVM出現


MVVM

參考:談談MVVM框架

我的理解是,

  1. 前后端的同事的工作就更分離了,也意味著更能夠敏捷開發。而不是臃腫的MVC模式下用Controller來維護View,然后前后端的耦合很大。現在,前后端同事只要在數據上保持一致。實際上工作就完全分離了。
  2. 可以做單頁應用,也就是對于后端來說只有一個HTML/Ftl文件維護即可。前端通過組件的形式來像堆積木一樣的堆積不同的頁面。對于用戶來說,訪問速度很快(因為沒有頁面同步加載的過程)

我的開發過程中,用的比較多的就是下面兩個功能。

  • 組件
  • Router
    我通過這兩個就可以開發單頁應用了

實戰中的例子

大致的思路就是:

  1. 我需要有個主頁面
  2. 我通過路由的方式轉移到不同的頁面去。
  3. 不同的頁面其實是一個組件,而不是通過去后臺請求發來的HTML/FTL文件。

根據前一節:3.2 Admin-LTE介紹
我們已經有一個app.vue來掛載到<Body>的第一個div上。所以思路的第一步已經做好了。

接下里就是我們的兩個子頁面:

├──app.vue
│ ├── com1.vue
│ └── com2.vue

對于vue來說。com1.vue和com2.vue既是兩個組件。接下來我們通過注冊router的方式,來講路由注冊號。這樣的話,頁面跳轉就可以做到了。

這里使用的是vuejs2.0的router注冊方式。最下面參考的鏈接是vuejs1.0的

改造main.js如下:

import Vue from 'vue'
import App from './App.vue'
import VueRouter from 'vue-router'
import VueResource from 'vue-resource'
import bot from './components/com1.vue'
import unity from './components/com2.vue'
/* eslint-disable no-new */
Vue.use(VueResource)

Vue.use(VueRouter)

// 1. 定義(路由)組件。
// 可以從其他文件 import 進來
// const bot = { template: '<div>foo</div>' }
// const Bar = { template: '<div>bar</div>' }

// 2. 定義路由
// 每個路由應該映射一個組件。 其中"component" 可以是
// 通過 Vue.extend() 創建的組件構造器,
// 或者,只是一個組件配置對象。
const routes = [
  {path: '/', redirect: 'com1'},
  {path: '/com1', component: com1},
  {path: '/com2', component: com2}
]

// 3. 創建 router 實例,然后傳 `routes` 配置
// 你還可以傳別的配置參數, 不過先這么簡單著吧。
const router = new VueRouter({
  routes // (縮寫)相當于 routes: routes
})

// 4. 創建和掛載根實例。
// 記得要通過 router 配置參數注入路由,
// 從而讓整個應用都有路由功能
new Vue({
  router,
  // el: '#app',
  template: '<App/>',
  components: { App }
}).$mount('#app')

這里就是注冊了一個router,并寫好路由 :

  {path: '/', redirect: 'com1'},
  {path: '/com1', component: com1},
  {path: '/com2', component: com2}

上述也比較好理解。就是首頁redirect到com1.vue。
點擊/com1,使用的是com1.vue
點擊/com2,使用的是com2.vue

接下來就是需要在app.vue中綁定router-view,關鍵代碼如下:

        <ul class="sidebar-menu">
          <li class="header">HEADER</li>
          <!-- Optionally, you can add icons to the links -->
          <!--<li class="active"><a href="#"><i class="fa fa-link"></i> <span><router-link to="/com1">com1頁面</router-link></span></a></li>-->
          <li>
            <router-link to="/com1"><i class="fa fa-link"></i><span>com1頁面</span></router-link>
          </li>
          <li>
            <router-link to="/com2"><i class="fa fa-link"></i><span>com2頁面</span></router-link>
          </li>
        </ul>
        <!-- /.sidebar-menu -->
      </section>
      <!-- /.sidebar -->
    </aside>
    <!-- Content Wrapper. Contains page content -->
    <div class="content-wrapper">
      <router-view></router-view>
    </div>

工程目錄如下
先通過<router-link>講跳轉的URI標識號。
在通過<router-view>具體的來加載各自的xxx.vue(com1.vue,com2.vue)

實現后的工程目錄如下:

目錄

知道這些原理之后,理論上就可以直接在各自的組件(xxx.vue)中開發自己的組件了。

組件

這里已com1.vue為例:

組件

這里的幾個概念:

  • <template>是頁面的視圖層,其中只能有一個<div>
  • components屬性:可以是引用的外部安裝的組件,也可以是自己定義的然后這里用到的組件。比如里面的Vuetable就是外部安裝來的,errorcasetable就是自己寫的另外一個組件。這里就達到了堆積木的效果
  • data屬性:這個頁面所有的數據。意味著是MVVM中的model
  • computed & mounted:這個是vue的生命周期。我還不是特別理解,但是computed是在頁面加載前就會計算好。mounted是頁面加載的時候調用。
  • methods:顧名思義,這個vue實例下的函數。相當于java的私有方法。我用的話一般是在mounted里調用這些方法。
實例生命周期

另外一部分是在view里的一些指令:

view

已下圖為例,用到了v-for和v-bind。

  • v-for:比較好理解,就是entity這個在上述data屬性中的數據,它是個list。所以可以渲染到了li標簽。
  • v-bind:就是綁定了 這里的style = {width:calculatePercentage(e)},width:calculatePercentage()是個函數。所以意思就是這個style是根據這個函數的計算結果來展示。

更多請參考:

  1. Class 與 Style 綁定
  2. 條件渲染
  3. 列表渲染

源碼

Git Hub Demo

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容