vue-cli脚手架(框架)

vue

一、创建vue项目

npm install vue-cli -g   #-g全局

(sudo)npm install vue-cli -g #mac笔记本

vue-init webpack myvue #项目的名字

cd muvue

npm install

npm run dev

二、目录结构的说明

出现下面这样的图就说明成功了

三、import和require的区别

import一定要放在文件顶部,他相当于一个指针引用了文件,并没有吧文件包含进来,需要调用文件时才引入
require可以吧文件放在任何位置,他是吧文件直接包含进来

四、设置文件路径的流程

1)建立组件(.vue的文件)

2)配置路由(index.js文件中配置)

3)<router-link></router-link>

4)<router-view></router-view>

5)import 包名 from "组件路径"

6)comonents进行注册

五、实现异步加载

//异步

vue-resource:实现异步加载数据(已经弃用)

axios:实现异步加载数据

npm install axios --save-dev

npm install vue-axios --save-dev

六、VUE的生命周期

1、定义vue对象并实例化
2、执行created函数
3、编译模板,只会编译template的模板
4、吧HTML元素渲染到页面当中
5、执行mounted函数,(加载)相当于onload
6、如果有元素的更新,就执行update函数
7、销毁实例

六、项目实战

仿抽屉网站

ALL.vue

 1 <template>

2 <div class='box'>

3 <ul>

4 <li v-for='item in arr'>

5 <div class='p1'>

6 <router-link :to="{path:'/detail',query:{ids:item.id}}">{{item.content}} </router-link>

7 </div>

8 <div class="p2">

9 <img :src="item.imgUrl">

10 </div>

11 </li>

12

13 </ul>

14

15 </div>

16 </template>

17

18 <script>

19 export default {

20 name: 'HelloWorld',

21 data () {

22 return {

23 arr: []

24 }

25 },

26 mounted () {

27 var url = '../../static/news.json'

28 var self=this;

29 this.$axios.get(url)

30 .then(function (response) {

31 console.log(response.data.result.data);

32 self.arr = response.data.result.data;

33 })

34 .catch(function (error) {

35 console.log(error);

36 })

37 }

38 }

39 </script>

40

41 <!-- Add "scoped" attribute to limit CSS to this component only -->

42 <style scoped>

43 h1, h2 {

44 font-weight: normal;

45 }

46

47 ul {

48 list-style-type: none;

49 padding: 0;

50 }

51

52 li {

53 display: inline-block;

54 margin: 0 10px;

55 }

56

57 a {

58 color: #42b983;

59 }

60 .box{

61 width: 980px;

62 }

63 .p1{

64 float:left;

65 width:780px;

66 }

67 img{

68 float:right;

69 }

70 </style>

View Code

DETAIL.vue

 1 <template>

2 <div class="box">

3 <h1>我是详细页面{{id}}</h1>

4 <ul>

5 <li>

6 <div class="p1">

7 {{obj.content}}

8 </div>

9 <div class="p2">

10 <img :src="obj.imgUrl">

11 </div>

12

13 </li>

14 </ul>

15 </div>

16 </template>

17

18 <script>

19 export default {

20 name: 'Detail',

21 data () {

22 return {

23 obj:{} ,

24 id:this.$route.query.ids

25 }

26 },

27 mounted(){

28 var url = "../../static/news.json"

29 var self =this;

30 this.$axios.get(url,{

31 params:{id:this.id}

32 })

33 .then(function (response) {

34 //console.log(response.data.result.data);

35 self.obj = response.data.result.data[0];

36 })

37 .catch(function (error) {

38 console.log(error);

39 })

40 }

41 }

42 </script>

43

44 <!-- Add "scoped" attribute to limit CSS to this component only -->

45 <style scoped>

46 h1, h2 {

47 font-weight: normal;

48 }

49

50 ul {

51 list-style-type: none;

52 padding: 0;

53 }

54

55 li {

56 display: inline-block;

57 margin: 0 10px;

58 }

59

60 a {

61 color: #42b983;

62 }

63 .box{

64 width: 980px;

65 }

66

67 .p1{

68 float:left;

69 width:700px;

70 }

71 .p2{

72 float:right;

73 }

74 </style>

View Code

DUANZI.vue

 1 <template>

2 <div>

3 <h1> 我是段子手</h1>

4 </div>

5 </template>

6

7 <script>

8 export default {

9 name: 'HelloWorld',

10 data () {

11 return {

12

13 }

14 }

15 }

16 </script>

17

18 <!-- Add "scoped" attribute to limit CSS to this component only -->

19 <style scoped>

20 h1, h2 {

21 font-weight: normal;

22 }

23 ul {

24 list-style-type: none;

25 padding: 0;

26 }

27 li {

28 display: inline-block;

29 margin: 0 10px;

30 }

31 a {

32 color: #42b983;

33 }

34 </style>

View Code

NaveList.vue

 1 <template>

2 <div>

3 <router-link to="/">首页</router-link>

4 <router-link to="/news">新闻</router-link>

5 <router-link to="/duanzi">段子</router-link>

6 </div>

7 </template>

8

9 <script>

10 export default {

11 name: 'HelloWorld',

12 data () {

13 return {

14

15 }

16 }

17 }

18 </script>

19

20 <!-- Add "scoped" attribute to limit CSS to this component only -->

21 <style scoped>

22 h1, h2 {

23 font-weight: normal;

24 }

25 ul {

26 list-style-type: none;

27 padding: 0;

28 }

29 li {

30 display: inline-block;

31 margin: 0 10px;

32 }

33 a {

34 color: #42b983;

35 }

36 </style>

View Code

NEWS.vue

 1 <template>

2 <div>

3 <h1> 我是新闻</h1>

4

5 </div>

6 </template>

7

8 <script>

9 export default {

10 name: 'HelloWorld',

11 data () {

12 return {

13

14 }

15 }

16 }

17 </script>

18

19 <!-- Add "scoped" attribute to limit CSS to this component only -->

20 <style scoped>

21 h1, h2 {

22 font-weight: normal;

23 }

24 ul {

25 list-style-type: none;

26 padding: 0;

27 }

28 li {

29 display: inline-block;

30 margin: 0 10px;

31 }

32 a {

33 color: #42b983;

34 }

35 </style>

View Code

index.js

 1 import Vue from 'vue'

2 import Router from 'vue-router'

3 import HelloWorld from '@/components/HelloWorld'

4 import ALL from '@/components/All'

5 import NEWS from '@/components/NEWS'

6 import DUANZI from '@/components/duanzi'

7 import Detail from '@/components/Detail'

8

9 Vue.use(Router)

10

11 export default new Router({

12 routes: [

13 {

14 path: '/hw',

15 name: 'HelloWorld',

16 component: HelloWorld

17 },

18 {

19 path: '/',

20 name: 'ALL',

21 component: ALL

22 },

23 {

24 path: '/news',

25 name: 'NEWS',

26 component: NEWS

27 },

28 {

29 path: '/duanzi',

30 name: 'duanzi',

31 component: DUANZI

32 },

33 {

34 path: '/detail',

35 name: 'Detail',

36 component: Detail

37 },

38

39

40 ]

41 })

View Code

App.vue

 1 <template>

2 <div id="app">

3 <NavList></NavList>

4 <router-view></router-view>

5 </div>

6 </template>

7

8 <script>

9 import NavList from './components/NavList'

10 export default {

11 name: 'App',

12 components: {NavList}

13 }

14 </script>

15

16 <style>

17 #app {

18 font-family: 'Avenir', Helvetica, Arial, sans-serif;

19 -webkit-font-smoothing: antialiased;

20 -moz-osx-font-smoothing: grayscale;

21 text-align: center;

22 color: #2c3e50;

23 margin-top: 60px;

24 }

25 </style>

View Code

main.js

 1 // The Vue build version to load with the `import` command

2 // (runtime-only or standalone) has been set in webpack.base.conf with an alias.

3 import Vue from 'vue'

4 import App from './App'

5 import router from './router'

6 import axios from 'axios'

7 import VueAxios from 'vue-axios'

8

9 Vue.prototype.$axios = axios;

10

11 //Vue.use(axios, VueAxios)

12 //Vue.config.productionTip = false

13

14 /* eslint-disable no-new */

15 new Vue({

16 el: '#app',

17 router,

18 components: { App },

19 template: '<App/>'

20 })

View Code

 项目需要注意的问题

 问题一:在手动执行webpack app/a.js publicndle.js打包时出错的解决方法需要修改为: require("style-loader!css-loader!./style.css")

 问题2:脚手架生成项目后,运行 npm run dev启动项目后,
             如果想把地址栏中的  #去掉,如:http://localhost:8080/#/news,需要在
             router文件夹下的index.js文件中,加入 mode: "history"

问题三:引入axios的2种方法:
    需要在main.js中进行设置:这2种方法都可以,但引用顺序不能翻转。

以上是 vue-cli脚手架(框架) 的全部内容, 来源链接: utcz.com/z/380462.html

回到顶部