目次
1.2.4 各コンポーネントのシミュレーションデータを準備する
3.5 上部のコンポーネントに折りたたみアイコンまたは表示アイコンが表示される
1.mockjs
1.1 mockjs の紹介
Mock.js は、フロントエンドのデバッグと開発を支援し、フロントエンドとバックエンドのプロトタイプを分離し、自動テストの効率を向上させるために使用されるシミュレートされたデータのジェネレーターです。Mock.js がフロント エンドを席巻したことは、次の 2 つの重要な機能によりよく知られています。
- 豊富なデータ タイプ
ランダムなテキスト、数字、ブール値、日付、電子メール、リンク、写真、色などの生成をサポートします。- Ajax リクエスト
のインターセプト 既存のコードを変更せずに、Ajax リクエストをインターセプトしてシミュレートされた応答データを返すことができます。
注: easy-mock、バックグラウンドをオンラインでシミュレートするデータ プラットフォーム
1.2 Mockjs の使用手順
1.2.1 mockjs の依存関係をインストールする
# -D表示只在开发环境中使用
npm install mockjs -D
1.2.2 プロジェクトへの mockjs の導入
開発環境でのみモックを使用し、本番環境にパッケージ化するときに自動的にモックを使用しないようにするには、env で構成を行うことができます。
config ディレクトリには、dev.env.js (開発環境) と prod.env.js (本番環境) の 2 つの構成ファイルがあります。
開発環境の構成は次のとおりです。
module.exports = merge(prodEnv, {
NODE_ENV: '"development"',
//增加配置
MOCK:'true'
})
本番環境の構成は次のとおりです。
module.exports = {
NODE_ENV: '"production"',
//新增mockjs配置
MOCK:'false'
}
main.js を変更します。
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
//开发环境下才会引入mockjs,新增
//import是ES6标准中的模块化解决方案,require是node中遵循CommonJS规范的模块化解决方案
//后者支持动态引入,也就是require(${path}/xx.js)
process.env.MOCK && require('@/mock')
......
注: import は ES6 標準のモジュラー ソリューションであり、require は動的インポートをサポートする CommonJS 仕様に準拠したノードのモジュラー ソリューションです。 つまり、require(${path}/xx.js)
1.2.3 ディレクトリとファイルの作成
1) src ディレクトリにモック ディレクトリを作成し、モック メイン ファイル index.js を定義し、このファイル /src/mock/index.js で傍受ルーティング構成を定義します。
index.js の内容は次のとおりです。
//引入mockjs,npm已安装
import Mock from 'mockjs'
//引入封装的请求地址
import action from '@/api/action'
//全局设置:设置所有ajax请求的超时时间,模拟网络传输耗时
Mock.setup({
//延时400s请求到数据
// timeout: 400
//延时200-400s请求到数据
timeout: 200 - 400
})
1.2.4 各コンポーネントのシミュレーションデータを準備する
各コンポーネント(*.vue)のモックデータを用意します。次に、mock/index.js にインポートします
mock/index.js にインポートし、リクエスト URL を設定し、データの送信をシミュレートします。
。。。。。。
//将模拟数据导入到这里。
import loginData from '@/mock/json/login-mock.js'
//获取请求的url
let url = action.getFullPath("SYSTEM_USER_DOLOGIN");
//通过mockjs模拟发送请求
//url 请求url
//post 请求方式
//loginData 模拟数据
//mockjs会拦截发送的请求,并使用模拟数据充当真实返回的响应数据
//Mock.mock(url, "post", loginData);
//如果请求既可以是get又可以是post的请求方式可以使用如下方式:
Mock.mock(url, /post|get/i, loginData);
モックデータの設定、login-mock.jsの編集
//为增加可读性loginData与mack/index.js中导入的名称对应
const loginData = {
"success": true,
"msg": "密码正确"
}
//将当前模块导出,导出后index.js才可以导入
export default loginData
1.2.5 テスト
nodejs サービスを開始し、バックグラウンド サービスを閉じて、ログインをテストします。モック データ テストは、mockjs を通じて利用できるようになりました。
mock/index.js に設定されているモックリクエストは、post メソッドまたは get メソッドのいずれかになります. get リクエストメソッドをテストする場合は、Login.vue の send リクエスト部分を get メソッドに変更します.
//修改url的获取方式,url已经配置在了action.js中
//post请求方式
/* let url = this.axios.urls.SYSTEM_USER_DOLOGIN;
this.axios.post(url, params).then(resp => {
console.log(resp);
}).catch(resp => {}); */
//get请求方式,注意:与post请求不同的是参数的设置方式
let url = this.axios.urls.SYSTEM_USER_DOLOGIN;
this.axios.post(url, {params: params}).then(resp => {
console.log(resp);
}).catch(resp => {});
注: フロントエンド テストに mockjs を使用する場合、フロントエンド プロンプトはバックエンド開発者とのインターフェイスを定義する必要があります。そうしないと、テストは無意味になります。
値が入力されていないときに送信をクリックすると、インターセプトされたリクエストがシミュレートされたデータを直接返すため、バックグラウンドを呼び出してホームページに直接ジャンプする必要はありません
1.2.6 フロントエンドのデバッグ
mock/index.js ファイルの構成を変更します。
//如果请求既可以是get又可以是post的请求方式可以使用如下方式:
//Mock.mock(url, /post|get/i, loginData);
//前端调试模式
Mock.mock(url, /post|get/i, (options) => {
// 最佳实践,
debugger;
return Mock.mock(loginData);
});
修正後、Submitをクリックし、開発者ツールを開く前提でデバッグモードに入ります。
1.2.7 mockjs がランダムな応答データを生成する
login-mock.js ファイルを編集します。
//静态响应
/* const loginData = {
"success": true,
"msg": "密码正确"
} */
//随机响应
const loginData = {
//1表示50%概率
"success|1": true,
//2-3指重复2到3次
"msg|2-3": "msg"
}
1.2.8 異なる応答に応じて異なるプロンプトを表示する
Login.vue ファイルを編集する
//get请求方式
let url = this.axios.urls.SYSTEM_USER_DOLOGIN;
this.axios.post(url, {
params: params
}).then(resp => {
//提示成功和失败,主要演示获取响应数据的方法
if (resp.data.success) {
//可以到element-ui官网查看用法
this.$message({
message: '登录成功',
type: 'success'
});
}else{
this.$message({
message: '登录失败',
type: 'error'
});
}
console.log(resp);
}).catch(resp => {});
結果を示す:
2. ログインと登録の間のジャンプ
2.1 ログインと登録ボタンを追加する
Login.vueの編集、忘れたパスワードの追加、登録ボタン
<!-- 加入忘记密码和注册链接 -->
<el-row style="text-align:center;margin-top: -5px;">
<el-link type="primary" style="margin-right: 40px;">忘记密码</el-link>
<el-link type="primary">用户注册</el-link>
</el-row>
2.2 登録コンポーネントの追加
Register.vue
<template>
<div class="login-wrap">
<el-form class="login-container">
<h1 class="title">用户登录</h1>
<el-form-item label="账户">
<el-input type="text" v-model="userNo" placeholder="账户" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="密码">
<el-input type="password" v-model="userPwd" placeholder="密码" autocomplete="off"></el-input>
</el-form-item>
<el-form-item label="确认密码">
<el-input type="password" v-model="userPwd2" placeholder="确认密码" autocomplete="off"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="register()" style="width:48%">注册</el-button>
<el-button type="primary" @click="cancel()" style="width:48%">返回</el-button>
</el-form-item>
</el-form>
</div>
</template>
export default {
name: 'Register',
data: function() {
return {
userNo: '',
userPwd: '',
userPwd2: ''
}
},
methods: {
register: function() {
},
gotoLogin: function() {
//获取路由,转换到根路径,及登录组件
this.$router.push('/');
}
}
}
一般的に使用される方法でルーティングをジャンプします。
字符串: this.$router.push('/home/first')
对象: this.$router.push({ path: '/home/first' })
命名的路由:
this.$router.push({ name: 'home', params: { userId: wise }})
params为传递的参数
this.$router.push、replace、および go の違い:
this.router.push(): 別の URL にジャンプします.このメソッドは履歴スタックにレコードを追加します.[戻る]をクリックして前のページに戻ります. this.router.replace(): 指定した URL にもジャンプします..メソッドは履歴に新しいレコードを追加しません。戻るをクリックすると、前のページにジャンプします。前のレコードは存在しません。
this.$router.go(n): window.history.go(n) と同様に、現在のページに対して前方または後方にジャンプするページ数。n には正または負の値を指定できます。負の数は前のページに戻ります
2.3 ルーティングの構成
ルーター/index.js
//首先导入组件
import Login from '@/views/Login'
import Register from '@/views/Register'
Vue.use(Router)
export default new Router({
routes: [
{
//配置路由,根路径访问Login组件
path: '/',
name: 'Login',
component: Login
},
{
//增加注册组件路由
path: '/Register',
name: 'Register',
component: Register
}
]
})
3. システムホーム
3.1 準備
- コースウェアで提供されるディレクトリに写真 (assets ディレクトリ) があるので、プロジェクトの assets ディレクトリにコピーします。
- Main.vue のコピーをプロジェクトのビュー ディレクトリ (ホームページ) に配置します。
- LeftAside.vue (左側の列コンポーネント)、TopNav.vue (上部コンポーネント) をコピーしてコンポーネント ディレクトリに配置します。
3.2 メインビュー
<template>
<el-container class="main-container">
<!-- 侧边栏有折叠效果,通过class控制折叠还是显示的效果 -->
<el-aside v-bind:class="asideClass">
<LeftAside></LeftAside>
</el-aside>
<el-container>
<el-header class="main-header">
<TopNav></TopNav>
</el-header>
<el-main class="main-center">Main</el-main>
</el-container>
</el-container>
</template>
// 导出模块
export default {
//组件名称
name: 'Main',
data: function() {
return {
asideClass: 'main-aside',
}
},
//将import的组件定义的Main中以便于使用
components:{
TopNav, LeftAside
}
};
3.3 ルーティングの構成
router/index.js、ルートを構成する前に Main コンポーネントをインポートします
....
{
//增加Main组件路由
path: '/Main',
name: 'Main',
component: Main
}
3.4 ログインコンポーネントの編集
ログインが成功すると、システムのホームページが表示されます。
システム実行後のインターフェース:
3.5 上部のコンポーネントに折りたたみアイコンまたは表示アイコンが表示される
TopNav.vue
export default {
//定义组件名称
name:'TopNav',
data: function() {
return {
//默认展示侧边栏
opened:true,
//require是node中遵循CommonJS规范的模块化解决方案,支持动态引入
imgshow: require('../assets/img/show.png'),
imgsq: require('../assets/img/sq.png')
}
}
}
3.6 左の列の折りたたみ効果を実現する
ステップ:
1.TopNav.vue はリスナー関数を定義し、折りたたみボタンのクリック イベントをリッスンし、折りたたまれた状態または開いた状態の値をカスタム イベントを通じて Main.vue コンポーネントに渡します。
2. Main.vue コンポーネントは、TopNav.vue コンポーネントによって渡された状態値を受け取り、状態値に従って開くか折りたたむスタイルを設定し、props を介して状態値を LeftAside.vue コンポーネントに渡します。
スクリプト セクション:
3. LeftAside.vue コンポーネントは、受信した状態値を介して独自の開始または折りたたみ効果を設定します。
結果を示す: