在使用 vuejs 做开发的时候,为了代码的复用和维护一般我们会把那些公共的代码封装为一个一个的组件,然后供其他的地方进行使用,在最初的封装里面我们都是采用全局封装或者局部封装,但是这种封装有很多的弊端问题:
全局定义 (Global definitions) 强制要求每个 component 中的命名不得重复
字符串模板 (String templates) 缺乏语法高亮,在 HTML 有多行的时候,需要用到丑陋的 \
不支持 CSS (No CSS support) 意味着当 HTML 和 JavaScript 组件化时,CSS 明显被遗漏
没有构建步骤 (No build step) 限制只能使用 HTML 和 ES5 JavaScript, 而不能使用预处理器,如 Pug (formerly Jade) 和 Babel
为了解决这些问题,官方引入一个 单文件组件的方式,形成一个 .vue 结尾的文件
在 vue 单组件里包含以下三部分
<template> //用于定义页面的组件结构,等价于之前写的组件对象里面的 template 属性 </template> <script> export default { //用于定义组件的数据,方法,生命周期函数 } </script> <style scoped> //定义组件的样式,在标签上加了 scoped 则代表是局部,只为当前这个组件所使用,并且还可以支持 less,sass /* 1:默认情况下,组件内的样式是全局的,会把组件的样式放到 public/index.html 页面的 head 中(在标签上加了 scoped 则代表是局部,只为当前这个组件所使用) 2:现在的前端开发里,引入了 css 预处理语言(less,sass 等),当使用脚手架创建项目时,如果选择了相关的 css 处理语言,则可以在我们的 style 标签里面使用与之对应的语法写预处理语言,但是要在标签上告诉使用的是哪一种(在创建项目的时候使用的是哪个,就引入哪一个) <style lang = "less"></style> */ </style>最后需要注意:形成的单文件组件 .vue 文件,浏览器并不能识别,vue-cli 的底层是借助 webpack 这样的构建工具进行转换操作(webpack 这个工具有能力(webpack(gulp) 的能力是借助一个叫做 vue-loader(之前学习gulp的时候里面的plugin) 这样的加载器进行完成的。)可以把 .vue 文件转换为 浏览器可以识别的 .js文件,然后在这个js文件里面就有我们之前使用 Vue.component() 这种方式写的组件。)
**vue 单组件必须在 vue-cli 构建的项目里使用,因为只有在这个里面才被翻译** 顺序:main.js ----> 主组件(App.vue) ------> 路由(router)-----> 单组件
template 里的内容在运行是会覆盖掉 index.html 上 对应的区域
<template> <div id="app"> <div id="nav"> //配置导航 <router-link to="/">Home</router-link> | <router-link to="/about">About</router-link> </div> //定义容器,显示对应的组件 <router-view/> </div> </template>根据路由表里的路径,在对应的文件夹下书写单组件,上面的代码中,单组件是书写在 views 文件夹内的,我们去到 views 问价夹里,新建一个单组件。
<template> <div class="about"> <h1 class="about1">This is an about page</h1> </div> </template> <style scoped> .about1{ background-color: greenyellow; } </style>1:从 main.js 开始,找到他所引入的 主组件 2:在 主组件 里面设置好导航,也就是跳转的路径(router-link to=""),并设置好显示组件的容器 3:去到路由表,设置好路由的规则,也就是访问哪个路由,就显示哪个组件 4:去到写单组件的文件夹里,把组件写好,以便拿出来用