《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入门笔记二的更多相关文章

  1. Vue入门(二)之数据绑定

    Vue官网: https://cn.vuejs.org/v2/guide/forms.html#基础用法 [入门系列] (一)  http://www.cnblogs.com/gdsblog/p/78 ...

  2. VUE 入门笔记

    前端的MVVM概念今年来也算是如火如荼,了解完 MVVM的概念,也该找个去尝试下 首先我先试了下 国内小而美的 VUE 试着照着文档敲出入门文件,内容都在注释里 <!doctype html&g ...

  3. Vue入门笔记(二)--基础部分之条件渲染

    github地址:https://github.com/iTao9354/basicVue/tree/master/conditional%20rendering(demo01-03) 一.v-if ...

  4. 后端小白的VUE入门笔记, 前端高能慎入

    因为项目需要前后端分离,后端竟然不用控制view层了,页面的跳转后端不再干涉,(前端的vue经过打包后成了一张index.html) 后端只需要响应给前端json串就ok,其实这不是爽歪歪?但是觉得还 ...

  5. Vue入门笔记(一)--基础部分

    github地址:https://github.com/iTao9354/basicVue(demo01-28) 一.初识Vue 使用双大括号{{message}}将数据渲染进DOM中.      可 ...

  6. vue入门(二) 让axios发送表单形式数据

    (一) 使用 axios vue-axios qs 1.qs是必不可少的插件 npm install --save axios vue-axios qs 2.安装完成后,在main.js插入以下代码 ...

  7. 后端小白的VUE入门笔记, 进阶篇

    使用 vue-cli( 脚手架) 搭建项目 基于vue-cli 创建一个模板项目 通过 npm root -g 可以查看vue全局安装目录,进而知道自己有没有安装vue-cli 如果没有安装的话,使用 ...

  8. vue学习笔记(二)vue的生命周期和钩子函数

    前言 通过上一章的学习,我们已经初步的了解了vue到底是什么东西,可以干什么,而这一篇博客主要介绍vue的生命周期和它常用的钩子函数,如果有学过java的园友可能有接触到在学习servlet的时候学过 ...

  9. Vue入门笔记#数据绑定语法

    #数据绑定语法# #文本: 数据绑定的基础表型形式,使用“Mustache”语法(双大括号)(特意查了一下Mustache同“moustache”释义为:髭:上唇的胡子,小胡子,最起码我觉得挺形象的) ...

  10. Vue入门笔记#过渡

    Vue过渡,可以在元素从DOM中移除,插入时自动调用过渡效果.根据设定,会适时的触发过渡效果. 在使用的目标标签里添加 transition: <div transition="my_ ...

随机推荐

  1. 跨越千年医学对话:用AI技术解锁中医古籍知识,构建能够精准问答的智能语言模型,成就专业级古籍解读助手(LLAMA)

    跨越千年医学对话:用AI技术解锁中医古籍知识,构建能够精准问答的智能语言模型,成就专业级古籍解读助手(LLAMA) 介绍:首先在 Ziya-LLaMA-13B-V1基线模型的基础上加入中医教材.中医各 ...

  2. 如何在C#中解析Excel公式

    前言 在日常工作中,我们经常需要在Excel中使用公式对表中数据进行计算(求和.求差和求均值等)和分析,从而实现对数据的分类,通常情况下,当数据量较少或场景变化单一的情况下,使用公式可以满足用户的要求 ...

  3. Html飞机大战(十六): 完成"清除"敌机奖励类

    好家伙,   我们先来尝试完成一个最简单的功能 正面buff: 1.消灭全图敌机   我们要先找一个好看一点的素材     把背景弄成透明的(搞了好久),感谢度娘的技术支持Photoshop中如何把图 ...

  4. 【Azure 应用服务】App Service 进入后台管理(Kudu)页面,因为文件过多而显示不全的问题

    问题描述 当App Service 应用发布到Azure上后,需要查看某一个日志文件时候,如果一个文件夹中的文件内容过多,则会出现错误消息提醒: Full error Message: There a ...

  5. linux vs code extension C# `GLIBC_2.27' not found

    settings中omnisharp:useModernNet改为true reboot虚机

  6. Zabbix“专家坐诊”第181期问答汇总

    问题一 Q:大佬们,有没有基础的 监控模板 触发器分享下? A:你可以试一下乐维免费版(https://forum.lwops.cn/download ),里面基本的模板全齐. 问题二 Q :orab ...

  7. Zabbix6.0使用教程 (二)—zabbix6.0常用术语

    上一次我们已经详细介绍了zabbix6.0的新增功能,本篇我们来说说zabbix6.0常用的一些术语,这个对小伙伴日常使用zabbix的时候还是非常有用,建议大家收藏起来,话不多说,附上干货. 概览 ...

  8. Spring Boot中的Freemarker模版引擎引用css和js的正确姿势

    最近在弄个软件更新Web管理系统,项目中引用了js和css等样式,但发现iframe中无法成功引入样式,稍微研究之后成功的发现的解决方法,以及spring boot项目中正确引用css和js的正确姿势 ...

  9. docker跑es流程再整理

    参考,欢迎点击原文:https://blog.csdn.net/qq_32101993/article/details/100021002(报错) 继老早前一篇文章整理的使用docker-compos ...

  10. SpringBoot 支付宝付款接口类、支付异步回调函数模板

    1.付款接口类 1.1.引入Maven依赖 <dependency> <groupId>com.alipay.sdk</groupId> <artifactI ...