使用vue的一些经验
虽然说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的一些经验的更多相关文章
- Vue 做项目经验
Vue 做项目经验 首先需要知道最基本的东西是: Vue 项目打包:npm run build Vue生成在网页上看的端口:npm run dev 修改端口号的地方在: config文件夹下index ...
- vue项目实战经验汇总
目录 1.vue框架使用注意事项和经验 1.1 解决Vue动态路由参数变化,页面数据不更新 1.2 vue组件里定时器销毁问题 1.3 vue实现按需加载组件的两种方式 1.4 组件之间,父子组件之间 ...
- vue.js练习经验总结
1.最好JSON数据与(模板里 v-bind里绑定的自定义属性不要重名),根据console控制台的提示来看,应该是重名所引起的编译错误 2.还有个很奇怪的问题,局部注册vue的过滤器,到了模板之后不 ...
- 一些做vue前端的经验
1.先赋值,后渲染 场景:表格渲染中,一般都是这样把json的东西传给table的 this.tableData = json.data.rows 然后的话我们一般会在渲染前对json中的数据做一些转 ...
- vue项目打包经验
[Element自带的图标不显示]打开 build/utils.js 文件,在如下位置添加 publicPath: '../../' [ElementUI的el-main组件默认会有padding=2 ...
- 入职一个月快速熟悉大型Vue项目经验感想
来到和睦的公司家庭已经一个月出头了,从技术层面来说,公司项目PC端是我目前来说接触的最大最复杂的项目了,德老师也说这个不断开发更新迭代的项目的代码量相对于全国的web来说是蛮多的,对于快速熟悉这样的大 ...
- Vue在MVC中的进行前后端的交互
Vue在MVC中的进行前后端的交互 Preface: 由于最近在研究前端相关的技术,作为前端非常优秀的框架Vue,个人在学习的过程中遇到一些问题,网上相关资料有限,所以在这这里总结一下个人使用Vue的 ...
- Vue在ASP.NET MVC中的进行前后端的交互
Vue在ASP.NET MVC中的进行前后端的交互 Preface: 由于最近在研究前端相关的技术,作为前端非常优秀的框架Vue,个人在学习的过程中遇到一些问题,网上相关资料有限,所以在这这里总结一下 ...
- 自动化工具构建vue项目
其实之前对vue的话也有过一段时间的学习,博客园也是写了5篇vue的学习笔记.但是一直是通过CDN的方式在html文件头部引入vue.js,然后实例化vue对象绑定Dom,写组件写方法.就算是在实际项 ...
随机推荐
- 关于 Source Engine 2007 网络通信的分析
最近在写自己的游戏引擎,主要是参考Quake和GoldSrc和SourceEngine2007,其中SourceEngine2007代码比较新一些. 对比了这几个引擎的代码,前两者代码比较简单,基于C ...
- WEB入门.六 盒子模型
学习内容 CSS盒子模型 盒子之间的关系 页面元素定位 能力目标 理解盒子模型 理解内容与表现分离的优点 理解并掌握盒子之间的关系 理解并掌握绝对定位与相对定位的用法 本章简介 上一章节中已经讲解了页 ...
- Java EE之表达式语言EL(下)
1.在EL表达式中使用作用域变量 表达式语言对作用域变量的支持,以及它解析变量的方式都使它变得非常有用. 1.1 EL表达式的隐式变量 EL表达式的作用域中定义了11个隐式变量. 当EL表达式引用了一 ...
- 洛谷P4382 劈配
不知道这个Zayid是谁... 题意: 有n个人,m个导师.每个导师能接纳bi个人,每个人对于这m个导师都有一个志愿档次. 优先满足靠前的人,问到最后每个人匹配的导师是他的第几志愿. 每个人又有一个限 ...
- 解决Anaconda4.2 Navigator打不开的问题
参照博客:http://blog.csdn.net/k3v1n1990s/article/details/72975528?utm_source=itdadao&utm_medium=refe ...
- Docker Secrets
一.简介 在微服务架构应用中,众多组件在集群中动态地创建.伸缩.更新.在如此动态和大规模的分布式系统上,管理和分发密码.证书等敏感信息将会是非常具有挑战性的工作.对于容器应用,传统的秘密分发方式,如将 ...
- 字典的setdefault() 和get()方法比较
Python 字典 setdefault() 函数 和get() 类似: 如果键存在字典中,返回其value值 如果键不存在字典中,创建键值对.完后,返回值为默认值. 话不多说,上栗子: setdef ...
- Python【多线程与多进程】
import time,threading print("=======串行方式.并行两种方式调用run()函数=======")def run(): print('哈哈哈') # ...
- Hadoop生态圈-Hbase的API常见操作
Hadoop生态圈-Hbase的API常见操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- linux查看tomcat日志
声明:以上内容均为转载,个人对这块知识搜罗之后放在一起,非原创,以后这块有问题还会继续添加. Tomcat 日志分为下面5类: catalina . 相当命令行输出日志 localhost . 相当于 ...