目錄javascript
<router-view />完成頁面渲染 => <router-link>(this.$router.push())
完成請求路徑的切換<!DOCTYPE html> <html lang="zh"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- 適配移動端 疏放程度是1倍--> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <!-- 圖標--> <link rel="icon" href="<%= BASE_URL %>favicon.ico"> <!-- 標題,這個能夠本身進行修改--> <!-- <title>b-proj</title>--> <title>vue項目</title> </head> <body> <!--當瀏覽器不支持js 的時候,會打印下面的這段話--> <!--如今都支持,因此能夠不須要--> <noscript> <strong>We're sorry but b-proj doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> </noscript> <!--下面的掛採點--> <div id="app"></div> <!-- built files will be auto injected --> </body> </html>
修改後css
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <link rel="icon" href="<%= BASE_URL %>favicon.ico"> <title>vue項目</title> </head> <body> <div id="app"></div> </body> </html>
style中寫入的全局配置,這個能夠進行刪除html
<style> /*全局配置*/ #app { /*瀏覽器配置*/ font-family: 'Avenir', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; } #nav { padding: 30px; } #nav a { font-weight: bold; color: #2c3e50; } #nav a.router-link-exact-active { color: #42b983; } </style>
app.vue修改後保留前端
<script src="main.js"></script> <template> <div id="app"> <!--提供一個視圖組件佔位符,佔位符被哪一個views下的視圖組件替換,瀏覽器就顯示哪一個頁面組件--> <router-view/> </div> </template>
1.入口文件:加載vue、router、store等配置 以及 加載自定義配置(本身的js、css,第三方的js、css)
2.建立項目惟一根組件,渲染App.vue,掛載到index.html中的掛載點 => 項目頁面顯示的就是 App.vue 組件
3.在App.vue中設置頁面組件佔位符
4.瀏覽器帶着指定 url連接 訪問vue項目服務器,router組件就會根據 請求路徑 匹配 映射組件,去替換App.vue中設置頁面組件佔位符
eg: 請求路徑 /user => 要渲染的組件 User.vue => 替換App.vue中的 <router-view/>
vue
import Vue from 'vue' import App from './App.vue' import router from './router' import store from './store' Vue.config.productionTip = false; new Vue({ router, store, render: h => h(App) }).$mount('#app');
修改後java
import Vue from 'vue' // 加載vue環境 import App from './App.vue' // 導入根組件 import router from './router' // 加載路由環境 vue-router import store from './store' // 加載倉庫環境 vuex Vue.config.productionTip = false; // Tip提示 new Vue({ el: '#app',//掛載點 router: router,//路由 store, render: function (read_root_vue) {//read_root_vue任意的一個函數,和h相同 return read_root_vue(App) } });
store是全局的單列webpack
存儲web
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex); export default new Vuex.Store({ //在store廠庫的內部,通常在state內寫要存入的數據 state: { //car: { //name: '默認', //price: 0 //} }, mutations: {}, actions: {}, modules: {} })
存儲vue-router
//this表明的是vue對象 //this.$store.state.car = car; export default { name: "Car", props: ['car'], methods: { goDetail(car) { // 先將要顯示的汽車對象存儲到倉庫,詳情頁加載後,本身去倉庫中獲取 // console.log(this.$store.state); this.$store.state.car = car; this.$router.push('/car/detail') } } }
取出,通常使用,建立的時候createvuex
//this.car = this.$store.state.car; export default { name: "CarDetail", data() { return { car: {} } }, created() { // console.log(this.$store.state.car); // this.car = {name: '五菱宏光', price: 120} this.car = this.$store.state.car; } }
導出:
export default { name: 'home', components: { }, data() { return { } } }
導入:
import Home from '../views/Home.vue
註冊
export default { name: 'home', // 二、註冊要使用的小組件 components: { Nav, Footer, Book, }, data() { return { books } } }
使用
在<template></template>
內部使用
<template> <div class="home"> <!--vue項目環境下,模板也受vue環境控制,使用標籤支持大小寫--> <!--三、使用導入的小組件--> <Nav></Nav> <div class="main"> <!-- key屬性是爲標籤創建緩存的標識,不能重複,且在循環組件下,必須設置 --> <Book v-for="book in books" :book="book" :key="book.title" /> </div> <Footer></Footer> </div> </template>
<router-link :to="'/book/detail/' + book.id">{{ book.title }}</router-link>
<router-link :to="{name: 'book-detail', params: {pk: book.id}}">{{ book.title }}</router-link>
this.$router.push(`/book/detail/${id}`);
this.$router.push({ name: 'book-detail', params: {pk: id}, });
this.$router.go(-1)//向後跳轉1頁 this.$router.go(-2)//向後跳轉2頁 this.$router.go(1)//向前跳轉1頁 this.$router.go(2)//向前跳轉2頁
import Home from '../views/Home.vue'
{ path: '/', name: 'home', component: Home },
{ path: '/index', redirect: '/' },
{ path: '/user', name: 'user', component: User },
{ path: '/book/detail/:pk', name: 'book-detail', component: BookDetail },
另一種導入方式
component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
等同於component: () => import( '../views/About.vue')
等同於import About from '../views/About.vue
{ path: '/about', name: 'about', // route level code-splitting // this generates a separate chunk (about.[hash].js) for this route // which is lazy-loaded when the route is visited. component: () => import(/* webpackChunkName: "about" */ '../views/About.vue') }
'../assets/img/西遊記.jpg'
let img1 = require('../assets/img/西遊記.jpg');
就是require(資源的相對路徑)//import '@/assets/css/global.css' 方法1 require('@/assets/css/global.css');
import settings from '@/assets/js/settings' Vue.prototype.$settings = settings;//原生的配置,在調用的時候能夠方便使用
//settings.js //導出 export default { base_url: 'http://localhost:8000', }
使用
this.$settings.base_url
當Vue用 v-for 正在更新已渲染過的元素列表是,它默認用「就地複用」策略。若是數據項的順序被改變,Vue將不是移動DOM元素來匹配數據項的改變,而是簡單複用此處每一個元素,而且確保它在特定索引下顯示已被渲染過的每一個元素。
爲了給Vue一個提示,以便它能跟蹤每一個節點的身份,從而重用和從新排序現有元素,你須要爲每項提供一個惟一 key 屬性。key屬性的類型只能爲 string或者number類型。