Vue入门笔记二
《Vue.js项目实战》
- 开发所需的包称为开发依赖,应该使用--save-dev标志进行安装
- 应用运行需要的直接依赖应该使用--save标志进行安装
模板
使用Pug
Pug(以前称为Jade)是一种编译到HTML的语言。
<template lang="pug">
ul.movies
li.movie Star Wars
li.movie Blade Runner
</template>
安装依赖:
npm install --save-dev pug pug-loader
脚本
JSX
在JSX中,标签首字母大小写很重要!
- 如果是小写,编译器会认为它是createElement函数的一个字符串参数,然后将它编译为一个HTML元素或已注册组件;
- 如果首字母大写,编译器会认为它是一个变量!
不能既使用渲染函数又使用模板,要移除文件中<template>
部分
示例:
<script>
export default {
data () {
return {
movies: [
{title: 'Star Wars'},
{title: 'Blade Runner'}
],
}
},
render(h) {
const itemClass = 'movie'
return <ul class='movie'>
{this.movies.map(movie =>
<li class={ itemClass }>{ movie.title }</li>
)}
</ul>
},
}
</script>
编译过程:babel-preset-vue中的一个特殊模块(名为babel-plugin-transform-vue-jsx)将JSX代码转换为纯JavaScript代码
编译之后:
render(h) {
const itemClass = 'movie'
return h('ul', {class: 'movies'},
this.movies.map(movie =>
h('li', { class: itemClass}, movie.title)
)
)
},
样式
1.有作用域的样式
可以使用<style>
标签的scoped属性将标签内的CSS作用域限定在当前组件中。
主要是因为PostCSS应用到模板和CSS的一个特殊属性data-v-xxxxxxxx。
<template>
<div class="title">
Hello
</div>
</template>
<style scoped>
.title {
color: blue;
}
</style>
等价于:
<template>
<div class="title" data-v-02ad4e58>
Hello
</div>
</template>
<style>
.title[data-v-02ad4e58]{
color: blue;
}
</style>
2.添加预处理器
Sass
(1)安装包
npm install --save-dev node-sass sass-loader
(2)在组件中,添加lang属性为"“sass”的<style>
标签
<style lang="sass">
.active
.title
border-bottom: 1px solid rgba(red, .2)
</style>
(3)用vue build命令测试你的组件
Less
(1)安装包
npm install --save-dev less less-loader
(2)在组件中,添加lang属性为"“less”的<style>
标签
<style lang="less">
.active{
.title{
border-bottom: 1px solid fade(red, 20%)
}
}
</style>
Stylus
Stylus比Less和Sass更年轻,也很受欢迎。
(1)安装包
npm install --save-dev stylus stylus-loader
(2)在组件中,添加lang属性为"“stylus”的<style>
标签
<style lang="stylus">
.active
.title
border-bottom 1px solid rgba(red, .2)
</style>
组件内的组件
1.创建一个新组件Movie.vue:
<template>
<li class="movie">
{{ movie.title }}
</li>
</template>
<script>
export default {
props: ['movie'],
}
</script>
<style scoped>
.movie:not(:last-child) {
padding-bottom: 6px;
margin-bottom: 6px;
border-bottom: solid 1px rgba(0, 0, 0, .1);
}
</style>
创建一个父组件Movies.vue:
<template>
<ul class="movies">
<li v-for="(movie, index) of movies" :key="index" class="movie" >
{{movie.title}}
</li>
</ul>
</template>
<script>
import Movie from './Movie.vue'
export default {
components: {
Movie,
},
data () {
return {
movies: [
{ title: 'Star Wars' },
{ title: 'Blade Runner' },
],
}
},
}
</script>
2.在Movies组件的脚本中导入Movie单文件组件:
<script>
import Movie from './Movie.vue'
export default {
// ...
}
</script>
3.使用对象设置components选项,将一些组件暴露给模板:
export default {
components: {
Movie,
// 相当于 `Movie: Movie,`
},
// ...
}
4.在模板中通过<Movie>
使用这个组件
<template>
<ul class="movies">
<Movie
v-for="(movie, index) of movies"
:key="index"
:movie="movie" />
</ul>
</template>
如果你在使用JSX
不需要components选项,因为以大写字母开头则可以直接使用组件定义
- 示例一:
import Movie from './Movie.vue'
export default {
render(h) {
return <Movie />
},
}
- 示例二:
<script>
import LocationInfo from './LocationInfo.vue'
import NoContent from './NoContent.vue'
import CreatePost from './CreatePost.vue'
import PostContent from './PostContent.vue'
import { createNamespacedHelpers } from 'vuex'
// posts module
const {
mapGetters: postsGetters,
mapActions: postsActions,
} = createNamespacedHelpers('posts')
export default {
computed: {
...postsGetters([
'draft',
'currentPost',
]),
cssClass () {
return [
'blog-content',
{
'has-content': this.currentPost,
},
]
},
},
render (h) {
let Content
if (!this.currentPost) {
Content = NoContent
} else if (this.draft) {
Content = CreatePost
} else {
Content = PostContent
}
return <div class={this.cssClass}>
<LocationInfo />
<Content />
</div>
},
}
</script>
Vue入门笔记二的更多相关文章
- Vue入门(二)之数据绑定
Vue官网: https://cn.vuejs.org/v2/guide/forms.html#基础用法 [入门系列] (一) http://www.cnblogs.com/gdsblog/p/78 ...
- VUE 入门笔记
前端的MVVM概念今年来也算是如火如荼,了解完 MVVM的概念,也该找个去尝试下 首先我先试了下 国内小而美的 VUE 试着照着文档敲出入门文件,内容都在注释里 <!doctype html&g ...
- Vue入门笔记(二)--基础部分之条件渲染
github地址:https://github.com/iTao9354/basicVue/tree/master/conditional%20rendering(demo01-03) 一.v-if ...
- 后端小白的VUE入门笔记, 前端高能慎入
因为项目需要前后端分离,后端竟然不用控制view层了,页面的跳转后端不再干涉,(前端的vue经过打包后成了一张index.html) 后端只需要响应给前端json串就ok,其实这不是爽歪歪?但是觉得还 ...
- Vue入门笔记(一)--基础部分
github地址:https://github.com/iTao9354/basicVue(demo01-28) 一.初识Vue 使用双大括号{{message}}将数据渲染进DOM中. 可 ...
- vue入门(二) 让axios发送表单形式数据
(一) 使用 axios vue-axios qs 1.qs是必不可少的插件 npm install --save axios vue-axios qs 2.安装完成后,在main.js插入以下代码 ...
- 后端小白的VUE入门笔记, 进阶篇
使用 vue-cli( 脚手架) 搭建项目 基于vue-cli 创建一个模板项目 通过 npm root -g 可以查看vue全局安装目录,进而知道自己有没有安装vue-cli 如果没有安装的话,使用 ...
- vue学习笔记(二)vue的生命周期和钩子函数
前言 通过上一章的学习,我们已经初步的了解了vue到底是什么东西,可以干什么,而这一篇博客主要介绍vue的生命周期和它常用的钩子函数,如果有学过java的园友可能有接触到在学习servlet的时候学过 ...
- Vue入门笔记#数据绑定语法
#数据绑定语法# #文本: 数据绑定的基础表型形式,使用“Mustache”语法(双大括号)(特意查了一下Mustache同“moustache”释义为:髭:上唇的胡子,小胡子,最起码我觉得挺形象的) ...
- Vue入门笔记#过渡
Vue过渡,可以在元素从DOM中移除,插入时自动调用过渡效果.根据设定,会适时的触发过渡效果. 在使用的目标标签里添加 transition: <div transition="my_ ...
随机推荐
- Redis原理再学习01:数据结构-跳跃表skiplist
跳跃表skiplist 简介 你一定比较好奇Redis里面的 sorted set 是怎么实现的,底层到底是什么?它的排序功能就是用到了这个skiplist-跳跃表. 什么是跳跃表? 跳跃表可以看做是 ...
- 项目实战:医疗流式细胞术数据文件(.fcs)导出excel表工具
需求 解析医疗实验室数据文件*.fcs. Demo导出数据 医疗流式细胞术数据文件标准(.fcs) 流式细胞术数据文件标准于1984年发布,以促进流式细胞术数据分析软件与在不同类型的 ...
- 运行Study.Trade模块的Web.Unified.Host
1.把Web.Host的项目设置为启动项目 上一篇文章报错,因为npm功能没有安装,导致Web.Unified.Host的wwwroot下没有libs目录. 2.默认是在IIS Express中承载 ...
- 电子设备内幕:RAM和ROM小百科
大家好,我是知微. 在智能手机出现之前,大家对RAM和ROM这两个词都没什么概念.如今很多手机在宣传的时候,都会标明有多大的RAM(运行内存)和ROM(存储空间),因为这在很大程度上影响手机的使用流畅 ...
- RocketMQ(11) 消息重试机制和死信队列
七.消息发送重试机制 1 说明 Producer对发送失败的消息进行重新发送的机制,称为消息发送重试机制,也称为消息重投机制. 对于消息重投,需要注意以下几点: 生产者在发送消息时,若采用同步或异步发 ...
- MYSQL中正则表达式检索数据库
1.MySQL中使用通配符检索数据库,之外还可以使用正则表达式来检索数据. 使用通配符 '_' 和 '%'的区别如下, 使用通配符的技巧:一般的来说 通配符可以处理数据,但是消耗内存较大 ...
- dos-基础用法
DOS(磁盘操作系统)是一个早期的基于命令行的操作系统,尽管现代操作系统已经发展为图形用户界面(GUI),但是了解和掌握一些基本的DOS命令仍然非常有用,尤其是在处理批处理脚本.网络管理或者在没有图形 ...
- C#项目管理引用的dll文件
这篇文章主要简单记录一下C#项目的dll文件管理方法,以便后期使用. 设置dll路径 参考C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁中间的 方法一:配置App.config文件的pri ...
- 一个简单的HTTP服务器的实现
我们继续我们的HTTP服务器的实现(使用别的代码来实现), 这个HTTP服务器的实现,我们主要就是关注TCP服务器中的recv还有send的处理. 首先,看一下HTTP,我们在用浏览器访问我们的TCP ...
- RTMP、X264与交叉编译
RTMP.X264与交叉编译 与HTTP(超文本传输协议)同样是一个基于TCP的Real Time Messaging Protocol(实时消息传输协议).由Adobe Systems公司为Fl ...