前端学习-Vue-cli

Vue-cli启动第一个项目

1.安装VSCode
2.电脑安装node.js
3 .安装vue-cli脚手架

之前代码都写在一个.vue文件中,但真实情况不是这样
真实的vue项目开发中,一般会借助webpack打包工具,帮助我们构建大型项目的开发目录,在开发完成后,会进行打包操作,帮助我们把代码打包生成一个线上可运行的最终代码, 若每个人都自己打包,那么太难了
vue官方提供了脚手架工具Vue-cli
通过这个脚手架,可以快速构建一个标准的vue项目,同时,这个脚手架工具中自带webpack的各种配置

按照官网教程,打开命令行

1.全局安装 vue-cli工具(只需要安装一次即可,后续创建项目不用反复安装)
  node -v 出现版本号
  npm -v 出现版本号
  以上两个说明电脑上已经正确安装了node和npm,如果上面两个没有版本号,需要先安装它们
  npm install --global vue-cli

2.在桌面上创建一个基于webpack模板的新项目,项目名叫my-project,当出现项目名字时一直回车选择默认选项即可
  cd Desktop
  vue init webpack my-project

3.启动项目,就可以看到vue默认的启动页面
  下面两个命令都会帮我们启动一个本地服务器来运行我们的代码
  npm run dev
  或
  npm run start
项目结构介绍
build:         项目的webpack配置文件,一般不动
config:        针对于开发环境和线上环境的一些配置文件,一般不动
node_modules:  项目依赖
static:        静态资源
index.html:    是整个网页最外层的html文件,可以看到有个id="app"的挂载点,vue的根实例就挂载到这个挂载点上
src:           源代码目录,代码写在这里
'下面看下src里面的内容'

'main.js文件:        整个项目的入口文件'
创建了Vue实例,看下实例做了什么
1. 让Vue实例的挂载点是'#app',就挂到了index.html的id="app"上
2. router是干嘛的?
3. 注册了一个局部组件App,可以看到有import App from './App',是从当前目录下的App引入的组件, 指得是src下的App.vue
4. 它的模板就是App这个组件的内容
所以,这个Vue实例,展示的内容,就是在这里注册进来的App组件 
根实例Vue里面展示的是从外部引入的根组件App

下面看下main.js的代码
import Vue from 'vue'
import App from './App'
import router from './router'
Vue.config.productionTip = false
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

App.vue
.vue文件:单文件组件编码形式

也就是说,一个组件是一个.vue后缀文件所定义的,在这个文件中,包含了组件的所有内容,包括它的模板,逻辑和样式
一个.vue文件就是一个完整的组件

'App.vue文件:        根组件'
可以看到全新的跟html不一样的页面
是脚手架工具提供给我们一套新的vue编码语法
这种语法叫做单文件组件,也就是说一个vue文件中,包含了一个组件必须的全部内容
有以下三个部分
1. template: 组件的模板,展示部分,这个模板下只能有一个最外层的根标签,不能并列多个
2. script:   组件的逻辑部分,里面有data函数,它的返回值对应着数据
3. style:    组件的样式部分,为模板做美化


如果把App.vue改成以下内容,那么运行如下图,之所以一运行就显示,是因为主入口根Vue里面显示的就是App组件
而App模板里是123,那么页面上就会显示123
<template>
  <div>123</div>
</template>

<script>
export default {
}
</script>

<style>
</style>
vue第一个demo:在input中输入内容,点击提交后,自动显示到下面的list上,并且input自动置空

实现代码如下:
在TodoList组件中实现
this指向当前组件

<template>
  <div>
    <input v-model="inputValue"/>
    <button @click="handleSubmit">提交</button>
    <ul v-for="(item, index) of list" :key="index">{{item}}</ul>
  </div>
</template>

<script>
export default {
    data() {
      return {
        inputValue: '',
        list: [] 
      }
    },
    methods: {
      handleSubmit() {
        this.list.push(this.inputValue)
        this.inputValue = ''
      } 
    }
}
</script>
对上面的demo进行组件拆分和组件通信

组件: 就是指页面上的某一部分
可以把一个大型网页拆成几个部分,每个部分就是一个小的组件,维护每个组件则相对简单很多

将上面demo中的list拆分成一个组件
1.在src的components下新建TodoItem.vue文件,这就是TodoItem组件
2.在TodoList中使用TodoItem组件
  -首先在TodoList的script中导入这个组件
  -通过components对局部组件进行声明,可以声明为一个对象,例如例子中我们命名为todo-item
   意思是在当前的组件模板中,我们通过todo-item这个标签来使用TodoItem组件
  以上两步就是把局部组件注册到当前组件中,就可以在上面的ul里面使用这个局部组件了
组件传值:在TodoList组件中使用子组件TodoItem
  1. 父组件向子组件传值: 父组件通过属性的形式向子组件传值
  2. 子组件接收值: 子组件中要在script的export default里的props里面对接收的数据进行一个定义,例如子组件要接收content这个数据,就要在子组件的props里声明对content的使用,声明好之后,就可以直接在子组件的template中使用content
  3. 子组件和父组件通信: 调用this.$emit()方法,向外触发一些事件,将事件名字和下标写在参数里带到父组件中去,事件名是自己定义的
Demo2:在Demo1的基础上,点击列表项,则将此列删除

删除:把index也传给子组件,当子组件被点击时,执行子组件的handleDelete方法,在这里和父组件通信,告诉父组件我要被删除了,将父组件带来的下标传回给父组件
子组件触发了事件出去,父组件就需要在创建子组件的时候,监听这个事件
@delete="handleDelete",意思是一旦监听到delete事件被触发,就会执行handleDelete这个方法 ,删除当前行list即可
代码如下:

'TodoItem组件'
<template>
 <li @click="handleDelete">{{content}}</li>
</template>

<script> 
export default {
 props: ['content', 'index'],
 methods: {
     handleDelete() {
         this.$emit('delete', this.index)
     }
 }
};
</script>


'TodoList组件'
<template>
  <div>
    <input v-model="inputValue"/>
    <button @click="handleSubmit">提交</button>
    <ul>
      <todo-item 
      v-for="(item, index) of list" 
      :key="index"
      :content="item" 
      :index="index"
      @delete="handleDelete"
      >
      </todo-item>
    </ul>
  </div>
</template>

<script>
import TodoItem from './components/TodoItem'
export default {
   components: {
      'todo-item': TodoItem
   },
    data() {
      return {
        inputValue: '',
        list: [] 
      }
    },
    methods: {
      handleSubmit() {
        this.list.push(this.inputValue)
        this.inputValue = ''
      },
      handleDelete(index) {
        this.list.splice(index,1)
      }
    }
}
</script>
全局样式和局部样式

当我们使用vue-cli的时候,每个组件都变成一个单文件组件,在这个文件中,可以对组件的模板,逻辑和样式进行定义,而定义样式时,可以分为全局样式和局部样式
style的scoped代表作用域
加scoped,代表样式只对当前组件有效
不加scoped,代表样式全局生效

Demo3:给Demo2的每个列表项加颜色

也就是给TodoItem加颜色

1. 在TodoItem中的template中,class="自己随便起个名字,例如叫做xixi"
2. 在TodoItem中的style中,定义一个叫做xixi的类,给它添加颜色

其中style的scoped意思是给这个样式增加一个作用域,作用域就是这个组件中,若其他组件使用xixi这个类,也不会改变颜色
若不写scoped,那么不论哪个组件,用到xixix这个类,则样式都会被影响

<template>
 <li class="xixi" @click="handleDelete">{{content}}</li>
</template>

<script> 
export default {
 props: ['content', 'index'],
 methods: {
     handleDelete() {
         this.$emit('delete', this.index)
     }
 }
};
</script>

<style scoped>
 .xixi {
     color: green
 }
</style>>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342