uni-app使用命令行搭建框架並引入uni-simple-router及uni-request

大家都知道uni-app發展迅猛,以及開發工具都十分方便。

我們根據官網的步驟新建一下uni-app的項目

官網任意門

環境爲vue(自己安裝)

以下步驟截取於官網

使用正式版(對應HBuilderX最新正式版)

vue create -p dcloudio/uni-preset-vue my-project

使用alpha版(對應HBuilderX最新alpha版)

vue create -p dcloudio/uni-preset-vue#alpha my-alpha-project

官網提示如下:

在這裏插入圖片描述

執行新建命令會從網絡下載模塊,需要一段時間

在這裏插入圖片描述

因爲之前我自定義過一個ts的默認模版,所以會比官網提供多一個選項,如下圖所示

在這裏插入圖片描述

初次的話直接選擇Hello uni-app就可以了

然後等待下載成功即可。

進入項目,執行npm run serve

在這裏插入圖片描述

第一次打開是沒有跳轉按鈕的,這是我後面加的,不用在意

在這裏插入圖片描述

我們先引入uni-request這個比較簡單的插件,進行簡單的請求攔截。

cnpm install uni-request --save

現在新增一個js文件並自定義一下請求信息

import uniRequest from 'uni-request'

uniRequest.defaults.baseURL = '*******';
uniRequest.defaults.headers.common['Authorization'] = '****';
uniRequest.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

//  其餘自定義信息可參考axios封裝自定義

export default uniRequest

然後在main.js中全局引入掛載

import uniRequest from '@/utils/request.js'

Vue.prototype.uniRequest = uniRequest

我們在代碼中引入測試一下

在index.vue文件中

先測試uni.request原生api用法,這是個免費api去地址官網申請一下就可以了

// 獲取天氣
getWeatherInfo(cityId) {
   const that = this
   // 測試發送請求
   uni.request({
     url: 'https://www.tianqiapi.com/api?version=v1&appid=****&appsecret=****&cityid=' + cityId,
     method: 'GET',
     success: function (res) {
        console.log(res)
     },
     fail: function (err) {}
   })
 },

請求成功

在這裏插入圖片描述
接下來我們使用封裝過的uniRequest測試一下,並且使用了異步請求同步化

async getHomeData() {
   // 測試發送請求
   const res = await this.uniRequest.get('/template/getTemplateList?type=applet')
   console.log(res)
 },

請求成功

在這裏插入圖片描述

然後在引入我自我感覺最麻煩的uni-simple-router這個插件,官網說跟vue-router是一樣一樣的,但是經常我的嘗試,發現只有p發展迅猛,以及開發工具都十分方便。
我們根據官網的步驟新建一下uni-app的項目官網任意門環境爲vue(自己安裝)以下步驟截取於官網使用正式版(對應HBuilderX最新正式版)

vue create -p dcloudio/uni-preset-vue my-project

使用alpha版(對應HBuilderX最新alpha版)

vue create -p dcloudio/uni-preset-vue#alpha my-alpha-project

官網提示如下:在這裏插入圖片描述執行新建命令會從網絡下載模塊,需要一段時間在這裏插入圖片描述因爲之前我自定義過一個ts的默認模版,所以會比官網提供多一個選項,如下圖所示在這裏插入圖片描述初次的話直接選擇Hello uni-app就可以瞭然後等待下載成功即可。進入項目,執行npm run serve在這裏插入圖片描述第一次打開是沒有跳轉按鈕的,這是我後面加的,不用在意在這裏插入圖片描述我們先引入uni-request這個比較簡單的插件,進行簡單的請求攔截。

cnpm install uni-request --save

現在新增一個js文件並自定義一下請求信息

timport uniRequest from 'uni-request'uniRequest.defaults.baseURL = '*******';
uniRequest.defaults.headers.common['Authorization'] = '****';
uniRequest.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';//  其餘自定義信息可參考axios封裝自定義export default uniRequest

然後在main.js中全局引入掛載

import uniRequest from '@/utils/request.js'
Vue.prototype.uniRequest = uniRequest

我們在代碼中引入測試一下在index.vue文件中先測試uni.request原生api用法,這是個免費api去地址官網申請一下就可以了

// 獲取天氣getWeatherInfo(cityId) {   
const that = this   // 測試發送請求   
uni.request({     
url: 'https://www.tianqiapi.com/api?version=v1&appid=****&appsecret=****&cityid=' + cityId,     
method: 'GET',     
success: function (res) { console.log(res) },     
fail: function (err) {}   }) },

請求成功在這裏插入圖片描述接下來我們使用封裝過的uniRequest測試一下,並且使用了異步請求同步化

async getHomeData() {   // 測試發送請求   
const res = await this.uniRequest.get('/template/getTemplateList?type=applet')   console.log(res) },

請求成功在這裏插入圖片描述然後在引入我自我感覺最麻煩的uni-simple-router這個插件,官網說跟vue-router是一樣一樣的,但是經常我的嘗試,發現只有自動構建路由表的方式能夠成功引入,引入之後還是有一系列的問題。

官網任意門

我給大家說一下我使用自己創建路由表的方式出現的問題

引入方式我就不贅述了,官網提供了各種各樣的方式

按照官網模式我們使用了npm的方式引入

如果按照官網直接使用下面的方式引入

在這裏插入圖片描述

那麼RouterMount會報各種各樣的錯誤,也可能是能力不夠,如果有任何問題,可以直接聯繫我。其實還存在另外一個報錯大致是name和path找不到是undefined,但是因爲測試的也可能不出現,也可以用註釋這個來解決

在這裏插入圖片描述

附上router/index.js的代碼

import Vue from 'vue'
import Router,{RouterMount} from 'uni-simple-router'

Vue.use(Router)

const router = new Router({
  debugger: true,
  routes: [
    {
      //注意:path必須跟pages.json中的地址對應,最前面別忘了加'/'哦
      path: '/pages/index/index',
      name: 'index', //在路由跳轉時可直接使用name來跳轉,後面會講到
      aliasPath: '/' //對於h5端你必須在首頁加上aliasPath並設置爲/
      //可以自定義路由元信息
    },
    {
      path: '/pages/login/login',
      name: 'login'
    }
  ]
})

console.log(router)

router.beforeEach((to, from, next) => {
  // ...
  console.log(to)
  console.log(from)
  next()
})

export default router

解決方法是把

//v1.3.5起 H5端 你應該去除原有的app.$mount();使用路由自帶的渲染方式
// #ifdef H5
RouterMount(app, '#app');
// #endif

// #ifndef H5
app.$mount(); //爲了兼容小程序及app端必須這樣寫纔有效果
// #endif

直接寫成這樣,估計跨平臺的話會存在問題,但是至少不會報錯(也求大佬們賜教)

app.$mount();

這樣是成功之後的樣子,但是它不會自動切換頁面,就會觸發路由守衛函數,只有當使用this.$Router.**這樣的函數纔會觸發,類似於下面這樣

this.$Router.push('/pages/login/login')

在這裏插入圖片描述

第二種方法: 自動構建路由表

過程也和官網一樣

官網任意門

有一個小提示就是新增vue.config.js和引入uni-read-pages之後一定要重啓!!!因爲我試了好多次以爲自己引入的過程出問題了,結果是因爲沒有重啓,編輯之後也重啓一下。

引入結果就和上面的截圖是一樣的,進入頁面第一次不會觸發路由攔截,不使用this.$Router.**也不會觸發,這裏的問題也可能是我引入的過程有問題,歡迎各位大佬賜教。

完成!

後續引入其他插件也會更新,歡迎期待!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章