虽然说VUE是数据驱动视图的框架,但有时候不得不获取DOM来获得一些样式属性,做一些操作,这时候就需要VUE获取DOM对象的方法。

vue获取DOM对象的方法:

如果是操作组件内部的DOM,可以通过给组件定义methods,这样可以通过组件内部的methods对象的方法里的默认参数e来获取组件的原生DOM对象,然后通过节点关系查找到你要的任何DOM节点和样式信息。但methods必须要绑定到某个目标元素的某种事件上。那么如果需要一加载页面就获取dom怎么办呢?

这时候可以把methods的方法在计算属性computed里调用。这样methods里的方法就能实现页面一加载就运行了。当然,正规的做法是在实例的生命周期钩子里调用。

不过,vue的标准搞法其实是这样的:

1、vue是数据驱动视图的框架,所以要改变组件的视图,请先改变组件的数据(所以,忘掉DOM吧);
2、应该在组件内部实现组件自己的数据业务逻辑(也就是在组件内部实现自己的data、methods、computed、created、mounted等,然后通过props获得父组件的data做子组件自己的data的初始值,同时子组件自己的视图显示用子组件自己的data来判断和控制),这才是vue正确的搞法。为什么这样说呢?因为这样你才不会面临“在父组件中的methods要控制子组件的视图,但却操作不了当前要控制的子组件的数据”这样的问题。

这样做的好处是:后端接口可以一次发送一个订单列表的数据对象数组给你。但一次展示多少个可以由前端自己决定,同时也可以实现用this访问父组件的data,并且还可以修改子组件自己的data来决定子组件怎么显示。

     //订单卡片组件定义
Vue.component('order-card', {
props: ['order','statetxt','icon','getticket','delorder'],
data:function(){
return {
startTime:this.order.order_time, //倒计时开始时间,由后端给出
minute:0, //倒计时显示的分钟数
second:0, //倒计时显示的秒数
countTime:3, //倒计时几分钟
state:this.order.state
};
},
created: function() { // `this` 指向 vm 实例
var that = this,
startTime = this.startTime,
countTime = this.countTime; if(this.state==0){ if(typeof startTime == "undefined"){return};
var now = Date.now(),timeline = countTime*60000,endtime = getFormatTime(timeline + Date.parse(startTime));
var clock = new clocker(getFormatTime(startTime),endtime,now);
clock.bindTimeEvent("timeout",function(){
that.state = 2;
});
clock.startAndRender(this,[null,null,"minute","second"]);
}
},
template:
'<div class="list_card">'
+' <div class="card_title clearfix ft14">'
+' <a class="orderNumber gray fl" href="javascript:;"><b v-bind:class="icon[order.oflag]"></b><span>订单号:</span><i>{{order.order_no}}</i></a>'
+' <span class="order_statue gray fr" v-if="state==0||state==1">{{state[state]}}</span><b class="icon icon-del ft20 gray fr" v-if="state==2||state==3||state==4" @click="delorder"></b>'
+' </div>'
+' <div class="card_cnt">'
+' <div class="film_info" v-if="order.oflag == 0">'
+' <div class="imgBox tc fl"><img v-bind:src="order.image[0]" /><span class="hook"></span></div>'
+' <p class="cutFont"><strong>片名:</strong><span>{{order.name}}</span></p>'
+' <p class="cutFont"><strong>开映:</strong><span>{{order.feature_time}}</span></p>'
+' </div>'
+' <!-- 图片滚动列表 STA -->'
+' <div class="img_scroll_box" v-if="order.oflag == 1">'
+' <ul class="img_list" v-bind:style="\'width:\'+(order.image.length * 70) + \'px\'">'
+' <li v-for="src in order.image"><img v-bind:src="src" /><span class="hook"></span></li>'
+' </ul>'
+' </div>'
+' <!-- 图片滚动列表 END -->'
+' </div>'
+' <div class="card_price ft14 tr">'
+' <span class="seatNum">共<i class="red">{{order.number}}</i>个{{ order.oflag == 0 ? "座位" : "卖品" }}</span><span class="realPrice">实付款:<i class="red">{{order.total_consume}}</i>元</span>'
+' </div>'
+' <div class="card_btm ft14 tr">'
+' <a class="detail fl" v-bind:href="order.url_OrderInfo"><i class="icon icon-fanhui ft14 psr"></i>详情</a>'
+' <span class="gray" v-if="state==0">支付剩余时间<i class="red">{{minute}}</i>分<i class="red">{{second}}</i>秒</span>'
+' <a class="btn btn_blue" v-bind:href="order.url_OrderInfo" v-if="state==0">付款</a>'
+' <a class="btn btn_blue" href="javascript:;" v-bind:tcode="order.ticket_code" v-if="state==1" @click="getticket">取票</a>'
+' <span class="gray" v-if="state==2">已取消</span>'
+' <span class="gray" v-if="state==3">已完成</span>'
+' <span class="gray" v-if="state==4">已退票</span>'
+' </div>'
+'</div>'
});

使用vue的一些经验的更多相关文章

  1. Vue 做项目经验

    Vue 做项目经验 首先需要知道最基本的东西是: Vue 项目打包:npm run build Vue生成在网页上看的端口:npm run dev 修改端口号的地方在: config文件夹下index ...

  2. vue项目实战经验汇总

    目录 1.vue框架使用注意事项和经验 1.1 解决Vue动态路由参数变化,页面数据不更新 1.2 vue组件里定时器销毁问题 1.3 vue实现按需加载组件的两种方式 1.4 组件之间,父子组件之间 ...

  3. vue.js练习经验总结

    1.最好JSON数据与(模板里 v-bind里绑定的自定义属性不要重名),根据console控制台的提示来看,应该是重名所引起的编译错误 2.还有个很奇怪的问题,局部注册vue的过滤器,到了模板之后不 ...

  4. 一些做vue前端的经验

    1.先赋值,后渲染 场景:表格渲染中,一般都是这样把json的东西传给table的 this.tableData = json.data.rows 然后的话我们一般会在渲染前对json中的数据做一些转 ...

  5. vue项目打包经验

    [Element自带的图标不显示]打开 build/utils.js 文件,在如下位置添加 publicPath: '../../' [ElementUI的el-main组件默认会有padding=2 ...

  6. 入职一个月快速熟悉大型Vue项目经验感想

    来到和睦的公司家庭已经一个月出头了,从技术层面来说,公司项目PC端是我目前来说接触的最大最复杂的项目了,德老师也说这个不断开发更新迭代的项目的代码量相对于全国的web来说是蛮多的,对于快速熟悉这样的大 ...

  7. Vue在MVC中的进行前后端的交互

    Vue在MVC中的进行前后端的交互 Preface: 由于最近在研究前端相关的技术,作为前端非常优秀的框架Vue,个人在学习的过程中遇到一些问题,网上相关资料有限,所以在这这里总结一下个人使用Vue的 ...

  8. Vue在ASP.NET MVC中的进行前后端的交互

    Vue在ASP.NET MVC中的进行前后端的交互 Preface: 由于最近在研究前端相关的技术,作为前端非常优秀的框架Vue,个人在学习的过程中遇到一些问题,网上相关资料有限,所以在这这里总结一下 ...

  9. 自动化工具构建vue项目

    其实之前对vue的话也有过一段时间的学习,博客园也是写了5篇vue的学习笔记.但是一直是通过CDN的方式在html文件头部引入vue.js,然后实例化vue对象绑定Dom,写组件写方法.就算是在实际项 ...

随机推荐

  1. 关于 Source Engine 2007 网络通信的分析

    最近在写自己的游戏引擎,主要是参考Quake和GoldSrc和SourceEngine2007,其中SourceEngine2007代码比较新一些. 对比了这几个引擎的代码,前两者代码比较简单,基于C ...

  2. WEB入门.六 盒子模型

    学习内容 CSS盒子模型 盒子之间的关系 页面元素定位 能力目标 理解盒子模型 理解内容与表现分离的优点 理解并掌握盒子之间的关系 理解并掌握绝对定位与相对定位的用法 本章简介 上一章节中已经讲解了页 ...

  3. Java EE之表达式语言EL(下)

    1.在EL表达式中使用作用域变量 表达式语言对作用域变量的支持,以及它解析变量的方式都使它变得非常有用. 1.1 EL表达式的隐式变量 EL表达式的作用域中定义了11个隐式变量. 当EL表达式引用了一 ...

  4. 洛谷P4382 劈配

    不知道这个Zayid是谁... 题意: 有n个人,m个导师.每个导师能接纳bi个人,每个人对于这m个导师都有一个志愿档次. 优先满足靠前的人,问到最后每个人匹配的导师是他的第几志愿. 每个人又有一个限 ...

  5. 解决Anaconda4.2 Navigator打不开的问题

    参照博客:http://blog.csdn.net/k3v1n1990s/article/details/72975528?utm_source=itdadao&utm_medium=refe ...

  6. Docker Secrets

    一.简介 在微服务架构应用中,众多组件在集群中动态地创建.伸缩.更新.在如此动态和大规模的分布式系统上,管理和分发密码.证书等敏感信息将会是非常具有挑战性的工作.对于容器应用,传统的秘密分发方式,如将 ...

  7. 字典的setdefault() 和get()方法比较

    Python 字典 setdefault() 函数 和get() 类似: 如果键存在字典中,返回其value值 如果键不存在字典中,创建键值对.完后,返回值为默认值. 话不多说,上栗子: setdef ...

  8. Python【多线程与多进程】

    import time,threading print("=======串行方式.并行两种方式调用run()函数=======")def run(): print('哈哈哈') # ...

  9. Hadoop生态圈-Hbase的API常见操作

    Hadoop生态圈-Hbase的API常见操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  10. linux查看tomcat日志

    声明:以上内容均为转载,个人对这块知识搜罗之后放在一起,非原创,以后这块有问题还会继续添加. Tomcat 日志分为下面5类: catalina . 相当命令行输出日志 localhost . 相当于 ...