1.問題:vue.runtime.js:580 [Vue warn]: Unknown custom element: <router-view> - did you register the component correctly? For recursive components, make sure to provide the "name" option.
2.index.vue
<template>
<div class="wrapper" id="app">
<router-view class="router_class"></router-view>
<tab_bar class="tabbar" @tabTo="TabTo"></tab_bar>
</div>
</template>
<style>
.router_class{
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
.tabbar{
position: fixed;
bottom: 0;
left: 0;
right: 0;
height: 90px;
}
</style>
<script>
var modal = weex.requireModule('modal');
import tab_bar from './component/tabBar.vue'
export default {
components:{
'tab_bar':tab_bar
},
methods:{
TabTo(_result){
console.log(" "+_result)
let _key=_result.data.key || '';
this.$router && this.$router.push('/'+_key)
}
}
}
</script>
3.router.js
import Router from 'vue-router'
import home from './Views/Home.vue'
import video from './Views/Video.vue'
import shoot from './Views/Shoot.vue'
import message from './Views/Messages.vue'
import my from './Views/My.vue'
Vue.use(Router)
export default new Router({
routes:[
{
path:'/',
redirect:home
},
{
path:'/Home',
component:home
},
{
path:'/Video',
component:video
},
{
path:'/Shoot',
component:shoot
},
{
path:'/Messages',
component:message
},
{
path:'/My',
component:my
}
]
})
5.entry.js
import App from './index.vue'
import router from './router.js'
new Vue(Vue.util.extend({el:'#root',router},App));
router.push('/');
6.webpack.config.js
const pathTo = require('path');
const fs = require('fs-extra');
const webpack = require('webpack');
const entry = {index:pathTo.resolve('src','entry.js')};
const weexEntry = {index:pathTo.resolve('src','entry.js')};
const vueWebTemp = 'temp';
const hasPluginInstalled = fs.existsSync('./web/plugin.js');
const isWin = /^win/.test(process.platform);
let fileType = '';
// Wraping the entry file
const getEntryFileContent = (entryPath, vueFilePath) => {
let relativePath = pathTo.relative(pathTo.join(entryPath, '../'), vueFilePath);
let contents = '';
/**
* The plugin's logic currently only supports the .we version
* which will be supported later in .vue
*/
if (hasPluginInstalled) {
const plugindir = pathTo.resolve('./web/plugin.js');
contents = 'require(\'' + plugindir + '\') \n';
}
if (isWin) {
relativePath = relativePath.replace(/\\/g, '\\\\');
}
contents += 'var App = require(\'' + relativePath + '\')\n';
contents += 'App.el = \'#root\'\n';
contents += 'new Vue(App)\n';
return contents;
}
// Retrieve entry file mappings by function recursion
const walk = (dir) => {
dir = dir || '.';
const directory = pathTo.join(__dirname, 'src', dir);
fs.readdirSync(directory).forEach((file) => {
const fullpath = pathTo.join(directory, file);
const stat = fs.statSync(fullpath);
const extname = pathTo.extname(fullpath);
if (stat.isFile() && extname === '.vue' || extname === '.we') {
if (!fileType) {
fileType = extname;
}
if (fileType && extname !== fileType) {
console.log('Error: This is not a good practice when you use ".we" and ".vue" togither!');
}
const name = pathTo.join(dir, pathTo.basename(file, extname));
if (extname === '.vue') {
const entryFile = pathTo.join(vueWebTemp, dir, pathTo.basename(file, extname) + '.js');
fs.outputFileSync(pathTo.join(entryFile), getEntryFileContent(entryFile, fullpath));
entry[name] = pathTo.join(__dirname, entryFile) + '?entry=true';
}
weexEntry[name] = fullpath + '?entry=true';
} else if (stat.isDirectory() && file !== 'build' && file !== 'include') {
const subdir = pathTo.join(dir, file);
walk(subdir);
}
});
}
// Generate an entry file before writing a webpack configuration
walk();
/**
* Plugins for webpack configuration.
*/
const plugins = [
/*
* Plugin: UglifyJsPlugin
* Description: UglifyJS plugin for webpack
* See: https://github.com/webpack-contrib/uglifyjs-webpack-plugin
*/
new webpack.optimize.UglifyJsPlugin({
minimize: true
}),
/*
* Plugin: BannerPlugin
* Description: Adds a banner to the top of each generated chunk.
* See: https://webpack.js.org/plugins/banner-plugin/
*/
new webpack.BannerPlugin({
banner: '// { "framework": ' + (fileType === '.vue' ? '"Vue"' : '"Weex"') + '} \n',
raw: true,
exclude: 'Vue'
})
];
// Config for compile jsbundle for web.
const webConfig = {
context: pathTo.join(__dirname, ''),
entry: entry,
output: {
path: pathTo.join(__dirname, 'dist'),
filename: '[name].web.js'
},
/**
* Developer tool to enhance debugging
*
* See: http://webpack.github.io/docs/configuration.html#devtool
* See: https://github.com/webpack/docs/wiki/build-performance#sourcemaps
*/
devtool: 'source-map',
/*
* Options affecting the resolving of modules.
*
* See: http://webpack.github.io/docs/configuration.html#module
*/
module: {
// webpack 2.0
rules: [{
test: /\.js$/,
use: [{
loader: 'babel-loader'
}],
exclude: /node_modules(?!(\/|\\).*(weex).*)/
}, {
test: /\.vue(\?[^?]+)?$/,
use: [{
loader: 'vue-loader',
options: {
compilerModules: [
{
postTransformNode: el => {
el.staticStyle = `$processStyle(${el.staticStyle})`
el.styleBinding = `$processStyle(${el.styleBinding})`
}
}
]
}
}]
}]
},
/*
* Add additional plugins to the compiler.
*
* See: http://webpack.github.io/docs/configuration.html#plugins
*/
plugins: plugins
};
// Config for compile jsbundle for native.
const weexConfig = {
entry: weexEntry,
output: {
path: pathTo.join(__dirname, 'dist'),
filename: '[name].js'
},
/*
* Options affecting the resolving of modules.
*
* See: http://webpack.github.io/docs/configuration.html#module
*/
module: {
rules: [{
test: /\.js$/,
use: [{
loader: 'babel-loader'
}],
exclude: /node_modules(?!(\/|\\).*(weex).*)/
}, {
test: /\.vue(\?[^?]+)?$/,
use: [{
loader: 'weex-loader'
}]
}, {
test: /\.we(\?[^?]+)?$/,
use: [{
loader: 'weex-loader'
}]
}]
},
/*
* These options configure whether to polyfill or mock certain Node.js globals and modules.
* This allows code originally written for the Node.js environment to run in other environments like the browser.
*
* See: https://webpack.js.org/configuration/node/#node
*/
node: {
setImmediate: false
// See "Other node core libraries" for additional options.
},
/*
* Add additional plugins to the compiler.
*
* See: http://webpack.github.io/docs/configuration.html#plugins
*/
plugins: plugins
};
// If The fileType is '.we', only need to use weexConfig for building.
if (fileType === '.we') {
module.exports = weexConfig;
} else {
module.exports = [webConfig, weexConfig];
}
運(yùn)行效果:
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。