接下来我们继续学习一天带你入门到放弃系列vue.js(二),如有问题请留言讨论!

v-if

index.html

  1.  
  1. <div id="app">
  2. <p v-if="user=='admin' && chmod == 777">欢迎管理员</p>
  3. <p v-else-if="user != 'admin' && user !='' ">欢迎用户登录</p>
  4. <p v-else>欢迎游客登录</p>
  5. </div>

可以使用不同的数据进行判断呈递不同的显示效果

计算属性

可以调用计算属性的方法,在vue中调取comouted中定义

看一下简单个人计算存款的html

  1. <table>
  2. <thead>
  3. <th>项目名称</th>
  4. <th>资产分配情况(单位:&yen;)</th>
  5. </thead>
  6. <tbody>
  7. <tr>
  8. <td>支付宝</td>
  9. <td><input type="text" v-model.number="alipay"></td>
  10. </tr>
  11. <tr>
  12. <td>京东金融</td>
  13. <td><input type="text" v-model.number="jd"></td>
  14. </tr>
  15. <tr>
  16. <td>银行卡</td>
  17. <td><input type="text" v-model.number="yhk"></td>
  18. </tr>
  19. <tr>
  20. <td>定期</td>
  21. <td><input type="text" v-model.number="dq"></td>
  22. </tr>
  23. <tr>
  24. <td>基金</td>
  25. <td><input type="text" v-model.number="jj"></td>
  26. </tr>
  27. <!--使用内置的计算方式:computed-->
  28. <tr>
  29. <td>总存款</td>
  30. <td>{{sum}}</td>
  31. </tr>
  32. <tr>
  33. <td>资产均值</td>
  34. <td>{{average}}</td>
  35. </tr>
  36. </tbody>
  37. </table>

main.js中data数据

  

  1. data: {
  2. alipay:1154,
  3. jj:3552,
  4. dq:24000,
  5. jd:3580,
  6. yhk:36871
  7. }

想必我们大家都会使用传统的方式进行data中变量进行如下假发计算获取

  1.  
  1. <!--普通方式计算-->
  2. <!--<tr>-->
  3. <!--<td>总存款</td>-->
  4. <!--<td>{{alipay+jd+yhk+dq+jj}}</td>-->
  5. <!--</tr>-->

至此在vue中提供了计算属性,computed,在main.js指定computed对象中指定计算

  

  1. computed:{
  2. sum:function (){
  3. return this.alipay+this.jj+this.dq+this.jd+this.yhk;
  4. },
那么前台直接去调取computed中的方法
  1. <tr>
  2. <td>总存款</td>
  3. <td>{{sum}}</td>
  4. </tr>
  5. <tr>
  6. <td>资产均值</td>
  7. <td>{{average}}</td>
  8. </tr>

在前台中我们使用了if-model绑定了data的数据可以根据自行的改变,视图层,数据层则随之改变,但是input的数字变为String类型,无法达到计算的效果!前面我们说过使用if-model.number可以返回数值类型!此时可以达到计算效果

自定义组件

组件:具有特定功能的标签,我们可以去指定,这样的标签可以进行大量的使用!

分类:全局组件和局部组件

区别:全局组件在所有范围通用,局部组件只在特点的element元素中生效!

全局组件

定义方式

  

  1. Vue.component('btn',{
  2. data:function (){
  3. return{
  4. count:0
  5. }
  6. },
  7. template:`<button @click="count++">此按钮被你狠点了{{count}}下</button>`
  8. })

此时这个btn组件(全局组件,定义完成,但是使用还需要进一步建立Vue实例)

  

  1. new Vue({
  2. el:"#app"
  3. })

前台调用组件

  1.  
  1. <div id="app">
  2. <btn></btn>
  3. </div>

简单介绍下这个组件,btn是组件名称,在定义组件的时候捆绑的data必须是一个函数(Function),而且这个函数必须拥有return,所调取的数据是通过return返回的对象!

template是这个组件构建的模板!

局部组件

通过名字很容易联想到这个组件的使用范围具有限制性,

定义方式

  

  1. st1=new Vue({
  2. el: "#st1",
  3. components: {
  4. alert: {
  5. data:function (){
  6. return{
  7. str:"113354",
  8. rea:111
  9. }
  10. },
  11. template: `<button @click="onAlert">弹死你!!!</button>`,
  12. methods: {
  13. onAlert: function () {
  14. alert(this.rea)
  15. }
  16. }
  17. }
  18. }
  19. })

局部组件在新建Vue实例的时候,新建一个components对象指定出组件模板,方法(methods),以及数据(data),此时组件的应用范围只有在新建实例的el指定的范围,否则Vue则报错!

组件配置

全部组件和局部组件大家通过上述的实例差不多了解了,进一步了解一下咱们自己写的组件还有那些配置项,这些配置项的功能都有哪些!

一般常用的三个:

1.template(模板,必选)

2.data数据

3.methods定义的方法

组件通讯

前面我们简单的了解了组件的定义,以及配置!这里我们看一下组件直接的数据传递也叫组件通讯如何实现!

分类:

1.父子传递(父传子)

2.子父传递(子传父)

3.同级传递(同一辈分组件)

父子传递

我们定义一个alert组件用于弹出信息提示框

首先我们看下前台(msg为弹出的提示信息)

  1.  
  1. <alert msg="你好!!!"></alert>

main.js

  

  1. Vue.component('alert',{
  2. template:`<button @click="onClick">点我</button>`,
  3. props:['msg'],
  4. methods:{
  5. onClick:function (){
  6. alert(this.msg)
  7. }
  8. }
  9. })

在组件的中新建一个props数组,这里是msg于调取时候的消息msg名称保持一致,此时这个数据存储在props中,我们需要点按钮去改变这个内容,在组件的methos方法中定义alert(this.msg),this只带这个组件(component中的msg),数据传递成功!

子父传递

我们有个需求,在一个父级组件中包含一个子组件,而改变了子组件的状态后,父级组件得到不同的状态反馈!此时这个子组件的状态变量如何传递呢?接下来看一下这个传递实现方式!

首先定义一下父组件

  

  1. Vue.component('parent',{
  2. template: `
  3. <div>
  4. <son @show_ye="show_ye"></son>
  5. <p v-if="show">余额:¥183.25</p>
  6.  
  7. </div>
  8. `
  9. })

新建子组件

  

  1. //子组件
  2. Vue.component('son',{
  3. template:`<button @click="onClick">我的余额</button>`,
  4. methods:{
  5. onClick:function(){
  6. this.$emit('show_ye',{
  7. a:1,
  8. b:2
  9. })
  10. }
  11. }
  12. })

新建的父组件(<parent></parent>)子组件(<son></son>),子组件是一个按钮,点击后会执行click事件,

此时需要在父组件中的子组件(<son></son>)上捆绑一个事件监控v-on:show_ye,绑定这个事件,

而在子组件进行监听这个show_ye事件,在methods中的this.$emit是监听了这个事件,{a:1,b:2}是成功监听后传出的数据,在父组件中有个是否显示余额的变量show,在父组件中默认是false,父组件的methos中要有这个show_ye方法,成功监听到这个事件后,子组件则传递到父组件,并将data的数据发送给父组件

完整的组件代码(main.js)

  

  1. //父组件
  2. Vue.component('parent',{
  3. template: `
  4. <div>
  5. <son @show_ye="show_ye"></son>
  6. <p v-if="show">余额:¥183.25</p>
  7.  
  8. </div>
  9. `,
  10. data:function(){
  11. return{
  12. show:false
  13. }
  14. },
  15. methods:{
  16. show_ye:function(data){
  17. this.show=true
  18. console.log(data)
  19. }
  20. }
  21. })
  22.  
  23. //子组件
  24. Vue.component('son',{
  25. template:`<button @click="onClick">我的余额</button>`,
  26. methods:{
  27. onClick:function(){
  28. this.$emit('show_ye',{
  29. a:1,
  30. b:2
  31. })
  32. }
  33. }
  34. })

在子组件成功监听到这个show_ye后,父组件的methods方法指定这个使用data参数则就能获取到子组件的data!

同级传递

前台2个组件

  1. <div id="app">
  2. <interview>aa</interview>
  3. <worker>bb</worker>
  4. </div>

interview和worker两个同级组件,boos中指定了input框,并使用v-model绑定了这个变量,可以去在数据层改变这个数,而在worker中可以正常显示这个变量的数值

组件的建立

  

  1. <script type="text/javascript">
  2.  
  3. //调度器
  4. var Event = new Vue();
  5.  
  6. //面试
  7. Vue.component('interview', {
  8. //定义组件模板内容
  9. template: `
  10. <div>我今天面试拿到的税前工资是:
  11. <input v-model="pre_tax_money" type="number" @blur="onChangeMethod" >
  12. </div>`,
  13. //定义组件的方法
  14. methods: {
  15. onChangeMethod: function () {
  16. //$emit负责对事件的监听,类似jquery的trigger
  17. Event.$emit("onChangeMethod", this.pre_tax_money);
  18. }
  19. },
  20. data: function () {
  21. return {
  22. pre_tax_money: "",//税前工资
  23. }
  24. }
  25. });
  26.  
  27. //面试成功,工作
  28. Vue.component('worker', {
  29. //定义组件模板内容
  30. template: `
  31. <div>我今天面试拿到的税后工资是:
  32. {{after_tax_money}}
  33. </div>`,
  34. data: function () {
  35. return {
  36. after_tax_money: "",//税后工资
  37. }
  38. },
  39. //钩子(类似小程序声明周期,页面渲染完毕后)
  40. mounted: function () {
  41. var _this = this;
  42. //监控当前事件
  43. Event.$on("onChangeMethod", function (pre_tax_money) {
  44. console.log("pre_tax_money=" + pre_tax_money);
  45. _this.after_tax_money = pre_tax_money * 0.9;
  46. })
  47. }
  48.  
  49. });
  50.  
  51. new Vue({el: "#app"});
  52.  
  53. </script>
  1.  

在boos这个组件捆绑一个数据pre_tax_money,当执行这个onChange后,进行监听这个事件,把这个数值传给调度器(Event),此时就是只要父组件中onChange执行后,则被调度器监听!数值被传入Event对象中

在被需要获取这个数据的组件中,首先定义一个数据data,return返回的名称于原数据不同,此时我们叫after_tax_money,还需要定义一个类似小程序的生命周期的东西,这里Vue官方称之为钩子,在这个组件中新建的对象mounted:中指定,在这个钩子中我们用调度器绑定刚才监听的那个事件onChange,回调函数的参数为data,就是刚才传入的data,但是此时使用this,这个this指定为Event对象,而不是component,在Event.$on之外我们首先要获取到这个component,使用that代替,然后进入钩子(mounted)赋值给component的data数据层就可以了!

原数据的methos方法

  

  1. //定义组件的方法
  2. methods: {
  3. onChangeMethod: function () {
  4. //$emit负责对事件的监听,类似jquery的trigger
  5. Event.$emit("onChangeMethod", this.pre_tax_money);
  6. }
  7. },

获取数据的钩子代码(mounted)

  

  1. //钩子(类似小程序声明周期,页面渲染完毕后)
  2. mounted: function () {
  3. var _this = this;
  4. //监控当前事件
  5. Event.$on("onChangeMethod", function (pre_tax_money) {
  6. console.log("pre_tax_money=" + pre_tax_money);
  7. _this.after_tax_money = pre_tax_money * 0.9;
  8. })
  9. }

首先在钩子内指定获取到这个component!

完整的代码在组件建立的就是了!

转自 十月梦想博客 。
原文地址《一天带你入门到放弃vue.js(一)

相关文章:

一天带你入门到放弃vue.js(一)

一天带你入门到放弃vue.js(二)

一天带你入门到放弃vue.js(三)

一天带你入门到放弃vue.js(二)的更多相关文章

  1. 一天带你入门到放弃vue.js(三)

    自定义指令 在上面学习了自定义组件接下来看一下自定义指令 自己新建的标签赋予特殊功能的是组件,而指定是在标签上使用类似于属性,以v-name开头,v-on,v-if...是系统指令! v-是表示这是v ...

  2. 一天带你入门到放弃vue.js(一)

    写在前面的话! 每个新的框架入手都会进行一些列的扯犊子!这里不多说那么多!简简单单说一下vue吧! Vue.js是目前三大框架(angular,vue,react)之一,是渐进式js框架,据说是摒弃了 ...

  3. 5分钟带你入门vuex(vue状态管理)

    如果你之前使用过vue.js,你一定知道在vue中各个组件之间传值的痛苦,在vue中我们可以使用vuex来保存我们需要管理的状态值,值一旦被修改,所有引用该值的地方就会自动更新,那么接下来我们就来学习 ...

  4. vue.js 二维码生成组件

    安装 通过NPM安装 npm install vue-qart --save 插件应用 将vue-qart引入你的应用 import VueQArt from 'vue-qart' new Vue({ ...

  5. Python爬虫从入门到放弃(十二)之 Scrapy框架的架构和原理

    这一篇文章主要是为了对scrapy框架的工作流程以及各个组件功能的介绍 Scrapy目前已经可以很好的在python3上运行Scrapy使用了Twisted作为框架,Twisted有些特殊的地方是它是 ...

  6. 【JavaScript从入门到放弃】JS基础-01

    作为一个前端开发人员,JS是我们行走江湖吃饭的家伙.基本上一个前端人员能值多少大洋,就看JS了.虽然各种框架层出不穷,但是归根结底学好原生JS才是硬道理. 学习任何新东西其实都遵循 10000 小时成 ...

  7. vue.js 二 路由懒加载

    当项目小的时候,我没考虑要去找这个得解决方案,也幸好现在几乎能迁移的项目都整合在了一个vue的项目里面 才发现编译后的vendor.js变得异常的大,而且几乎在项目每一个页面都需要加载这一个js,项目 ...

  8. 《vue.js2.0从入门到放弃》学习之路

    原文地址: Vue.js2.0从入门到放弃---入门实例(一):http://blog.csdn.net/u013182762/article/details/53021374 Vue.js2.0从入 ...

  9. Vue.js入门

    之前一直用的是jQuery,jQuery手动操作DOM导致性能不够好,因为DOM修改导致的页面重绘.重新排版!重新排版是用户阻塞的操作,同时,如果频繁重排,CPU使用率也会猛涨! Vue.js是数据驱 ...

随机推荐

  1. mongoDB 其他数据类型

    时间 类型 获取当前时间 new Date() 自动生成当前时间(国际标准时间) db.class.insertOne({book:"数学",date:new Date()}) D ...

  2. 压测过程中,获取不到redis连接池,发现redis连接数高

    说明:图片截得比较大,浏览器放大倍数看即可(涉及到隐私,打了码,请见谅,如果有疑问,欢迎骚扰). 最近在压测过程中,出现获取不到redis连接池的问题 xshell连接redis服务器,查看连接数,发 ...

  3. 关于confluence上传文件附件预览查看时出现乱码的问题解决办法

    在confluence上传excel文件,预览时发现乱码问题主要是因为再上传文件的时候一般是Windows下的文件上传,而预览的时候,是linux下的环境,由于linux下没有微软字体,所以预览的时候 ...

  4. Linux性能优化实战:到底应该怎样理解平均负载(02)

    一.平均负载与CPU使用率并没有直接关系 1.平均负载 单位时间内,系统处于可运行状态和不可终端状态的平均进程数也就是平均活跃进程数,它和cpu使用率并没有直接关系, 可运行状态: 正在使用的cpu或 ...

  5. 关于java集合的练习

    关于java集合的练习 练习一:Collection集合练习 一.产生10个1-100的随机数,并放到一个数组中,把数组中大于等于10的数字放到一个list集合中,并打印到控制台. public cl ...

  6. 第十五节: EF的CodeFirst模式通过DataAnnotations修改默认协定

    一. 简介 1. DataAnnotations说明:EF提供以特性的方式添加到 domain classes上,其中包括两类:  A:System.ComponentModel.DataAnnota ...

  7. mysql数据库truncate表时间长处理

    [环境介绍] 系统环境:Linux + mysql 5.7.18 + 主从复制架构 [背景描述] 客户反映用在mysql数据库上truncate一个innode引擎的list分区100G左右表时,耗时 ...

  8. [再寄小读者之数学篇](2014-06-20 Beta 函数)

    令 $\dps{B(m,n)=\sum_{k=0}^n C_n^k \cfrac{(-1)^k}{m+k+1}}$, $m,n\in\bbN^+$. (1) 证明 $B(m,n)=B(n,m)$; ( ...

  9. 《11招玩转网络安全》之第一招:Docker For Docker

    玩转黑客那些工具,缺少了虚拟机怎么行,除了用虚拟机虚拟整个系统,Docker也不能缺少,读者只需要知道,Docker只虚拟Linux系统中的某个程序就可以了.本节就来介绍Linux下安装设置Docke ...

  10. Java部分概念理解

    第1部分 方法 1.1 方法基本概念 1) 方法:用于封装一段特定功能代码,尽可能一个方法至只实现一个基本功能,相当于C语言中的函数: 2) 方法可以多次调用: 3) 避免代码冗余,便于维护,便于团队 ...