文档章节

Vue.js、vue安装步骤、单文件组件、模板指令

娇娇jojo
 娇娇jojo
发布于 2017/09/05 14:54
字数 1128
阅读 234
收藏 8

作者:汪娇娇

时间:2017年8月30日

1、npm淘宝镜像

直接用npm安装vue-cli会特别慢,在安装vue-cli之前可以先安装一个淘宝镜像。之后的安装命令还是和npm一样,只不过把npm改成cnpm,但速度已经不是一个等级的了,嗖嗖嗖嗖~~~

npm install -g cnpm --registry=https://registry.npm.taobao.org

2、安装vue项目步骤

轻轻松松下面几步,就可以创建并启动一个带热重载、保存时静态检查以及可用于生产环境的构建配置的项目啦。

# 全局安装 vue-cli
$ cnpm install --global vue-cli
# 创建一个基于 webpack 模板的新项目(项目名称:vue-webpack)
$ vue init webpack vue-webpack
# 安装依赖,走你
$ cd my-project
$ cnpm install
# 运行项目
$ cnpm run dev

生成好的目录结构如下:

3、vue组件

下图是一个单文件组件:

一个vue单文件组件的本质其实也就是html、css、js合成的一个文件,只不过必须用vue规定的格式来写,也就是在下图的template、script、style里面写相应的html、js和css:

那vue组件是怎么映射到页面的,看下图就明白了(借助webpack解析):

 

4、vue重要选项

下面介绍一下vue组件的重要选项(属性):

(1)data:vue对象的数据

new Vue({
    data: {
        a: 1
    }
})

<p> {{ a }} </p>

(2)methods:vue对象的方法

new Vue({
    data: {
        a: 1
    },
    methods: {
        doSomething: function() {
            console.log(this.a);
        }
    }
})

(3)watch:设置了对象监听的方法

监听你想监听的任何数据,下图监听数据 “a” 的变化,可以打印出变化之前的值和现在的值。

new Vue({
    data: {
        a: 1
    },
    methods: {
        doSomething: function() {
            console.log(this.a);
        }
    },
    watch: {
        'a': function(val, oldVal) {
            console.log(val.oldVal);
        },
        //深度watch(适用于监听的数据结构比较复杂,例如 c = { list: "apple", isFinished: true} ,那监听c的变化就建议选择深度watch,而且必须当deep为true时生效,false时不生效(例如,将isFinished改为false,结果还是true))
        c: {
           handler: function (val, oldVal) { /* ... */ },
           deep: true
        }
    }
})

 

5、模板指令

Vue对象里的设置通过html指令进行关联(也就是双向数据绑定),重要指令包括:

(1)渲染数据:v-text、v-html、{{}}

<P> {{ a }} </p>
<P v-text="a"></p>
<P v-html="a"></p>

new Vue({
    data: {
        a: 1
    }
})

{{}}是v-text的一个简写。

v-textv-html的区别:v-text会将html标签escape成文本,而v-html不会。

(2)控制显隐:v-if、v-show

<p v-if="isShow"></p>    //直接不渲染
<p v-show="isShow"></p>  //渲染这个dom元素,通过css的display属性来控制

new Vue({
    data: {
        isShow: true
    }
})

(3)循环渲染:v-for

<ul>
    <li v-for='item in items'>
        <p v-text='item.label'></p>
    </li>
</ul>

data: {
    items: [
        {
            label: 'apple'
        },
        {
            label: 'banana'
        }
    ]
}


(4)绑定事件:v-on

<button v-on:click="doThis"></button>
<button @click="doThis"></button>   //简写@

methods: {
    doThis: function someThing) {
        
    }
}

(5)绑定属性:v-bind

<img v-bind:src="imageSrc">   //字符串

<div :class="{ red: isRed }"></div>  //布尔值
<div :class="[classA, classB]"></div>   //字符串
<div :class="[classA, { classB: isB, classC: isC }]"></div>

 

6、如何划分组件

简单的页面还好,一旦涉及功能性复杂的大型网站,那就需要好好规划规划组件的划分了,那组件到底要怎么划分呢,还是需要按照什么原则去划分?

虽然没有强烈的规则去要求,但还是有原则可依的。我觉得组件大致可以划分为2类,也就是功能模块页面区域,大家可以根据自己的情况去划分,下面的划分仅供大家参考:

  • 功能模块:select、pagenation...
  • 页面区域:header,footer,sidebar...

(1)components

那么问题来了,划分组件之后,这些组件之间如何相互调用呢?

components君正式登场!!!

App.vue是组件入口,footer.vue和header.vue是组件。

(2)props

相互调用的问题解决了,接下来说说组件之间的通信 - props

下面是父组件向子组件传递信息msg,只有用props注册了msg之后,子组件里才可以获取到msg的值,否则,无论传什么值,子组件都是没法取到的。

那子组件传信息给父组件呢?

那么子组件就可以直接使用$on或者$emit触发事件来传信息给父组件,下图是$emit的实例。

//父组件App.vue(自定义child-tell-me事件,触发listenToMyBoy方法)
<header-a v-on:child-tell-me='listenToMyBoy'></header-a>

methods: {
	listenToMyBoy: function(msg){
		this.childWords = msg;
	}
}
//子组件(点击按钮将msg发送给父组件)
<button @click="onClickMe">Click!</button>

export default {
	data () {
		return {
			msg: "Hello Vue"
		}
	},
	methods: {
		onClickMe: function(){
			this.$emit("child-tell-me",this.msg);
		}
	}
}

 

© 著作权归作者所有

共有 人打赏支持
娇娇jojo
粉丝 177
博文 59
码字总数 64333
作品 0
海淀
加载中

评论(1)

DoubleKang
DoubleKang
666
前端框架之Vue.js 库的使用

vue.js简介 Vue.js是前端三大新框架:Angular.js、React.js、Vue.js之一,Vue.js目前的使用和关注程度在三大框架中稍微胜出,并且它的热度还在递增。 Vue.js可以作为一个js库来使用,也可以用...

玄学酱
06/22
0
0
构建你的第一个Vue.js组件

我记得当时我拿起CakePHP,我很喜欢,开始使用它是多么容易。这些文档不仅结构合理,详尽无遗,而且用户友好。多年以后,这正是我在Vue.js中感受到的。然而,与Cake相比,Vue文档仍然缺少一件...

Swiftly
07/17
0
0
AgileBPM/bpm-app

AgileBPM 移动端 与pc端无缝协同处理办公任务。 它是一个比较完整的流程审批的移动端项目,如果您是第一次开发基于VUE的App,它是一个很好的基础项目模板。如果您正在开发协同办公类APP,那么...

AgileBPM
07/21
0
0
webpack+vue+vueRouter模块化构建完整项目实例超详细步骤(附截图、代码、入门篇)

开始(确认已经安装node环境和npm包管理工具) 1、新建项目文件名为vuedemo 2、 初始化项目 >安装项目依赖 3、 默认安装最新版vue 4、 安装webpack,webpack-dev-server(是一个小型的Node....

元谷
05/01
0
0
Vue.js入门之工程目录介绍

Vue 是一套用于构建用户界面的渐进式框架,与其它大型的页面框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另...

异步社区
05/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

no such module 'pop'问题

在github上 clone 了一个 swift 项目,编译时提示"no such module 'POP'"错误,查了一下居然是因为podfile中指定的最低版本是iOS 11.0,大于我测试手机的iOS版本10.3.3,将Podfile中的最低版...

yoyoso
今天
1
0
redis 系列一 -- 简介及安装

1.简介 redis -- remote dictionary server 远程字典服务 使用 C 语言编写; 高性能的 key-value数据库; 内存数据库,支持数据持久化。 Redis 是一个开源(BSD许可)的,内存中的数据结构存...

imbiao
今天
3
0
nginx log记录请求响应时间

有时为了方便分析接口性能等,需要记录请求的时长,通过修改nginx的日志格式可以做到,如 添加一个新的log_format log_format timed_combined '$remote_addr - $remote_user [$time_local] "...

swingcoder
今天
4
0
Spring MVC之RequestMappingHandlerMapping匹配

对于RequestMappingHandlerMapping,使用Spring的同学基本都不会陌生,该类的作用有两个: 通过request查找对应的HandlerMethod,即当前request具体是由Controller中的哪个方法进行处理; 查...

爱宝贝丶
今天
5
0
Java Web--增删改查之二界面后台java代码(转载参考)

/** *  *//** * @author Administrator * */package dao; import java.sql.*;public class DBConn {/** * 链接数据库 * @return */  ...

小橙子的曼曼
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部