1.过滤器:
 filters: {search(list) {         es5var _self = this;//return list.filter(menu => menu.childs.name.join("").indexOf(this.searchVal) > -1);return list.filter(function(menu) {var lists = menu.childs;var arr = [];arr.push(menu.name)for (var i = 0, len = lists.length; i < len; i++) {arr.push(lists[i].name);}return arr.join("").indexOf(_self.searchVal) > -1;})},searchlist(list) {              es6return list.filter(menulist => menulist.name.indexOf(this.searchVal) > -1);}},

  

2.ajax:
方法一:在写ready里面
 ready: function() {var _self = this;$.ajax({url: 'url',dataType: 'json',success: function(data) {_self.menus = data.data.menu.childs;_self.user = data.data.user;},error: function(err) {console.log(err);}})},

  

3.用路由的时候又要传数据(但是router.start和new Vue不能同时写)
router.start({data() {return {currentmenu: '',message: 'asdaaa',menus: [],user: {},searchVal: ''}},filters: {search(list) {var _self = this;//return list.filter(menu => menu.childs.name.join("").indexOf(this.searchVal) > -1);return list.filter(function(menu) {var lists = menu.childs;var arr = [];arr.push(menu.name)for (var i = 0, len = lists.length; i < len; i++) {arr.push(lists[i].name);}return arr.join("").indexOf(_self.searchVal) > -1;})},searchlist(list) {return list.filter(menulist => menulist.name.indexOf(this.searchVal) > -1);}},ready: function() {var _self = this;// console.log(env.api)$.ajax({url: 'url',dataType: 'json',success: function(data) {// console.log(data.data.menu.childs);// console.log(data.data.user);_self.menus = data.data.menu.childs;_self.user = data.data.user;},error: function(err) {console.log(err);}})},methods: {changeCurrent: function(curl) {// alert(this.message)this.currentmenu = curl;}},component: app
}, "#app");

  

4.文件上传    
$.ajaxFileUpload({url: 'url',type: 'post',secureuri: false, //是否启用安全提交,默认为falsefileElementId: 'imeiExcelUrl', //文件选择框的id属性dataType: 'json', //返回数据的类型success: function(data) { //服务器响应成功时的处理函数config.data.show = false;if (data.meta.code == '200') {window.location.reload();} console.log(data.meta);},error: function(data) { //服务器响应失败时的处理函数console.log(data);}});

  

5.用v-if指令后,对该dom绑定事件不起作用
换了v-show
6.有没有可以监听地址栏变化的方法
还没解决
7.复制文字到剪切板
(1)
<!-- 点击复制begin --><script type="text/javascript" src="/js/zclip/jquery.zclip.js"></script>
<!-- 点击复制end -->
(2)
$("#phone_number").zclip({path: "/js/zclip/ZeroClipboard.swf",copy: function(){return $(this).val();},beforeCopy:function(){/* 按住鼠标时的操作 */$(this).css("color","orange");},afterCopy:function(){/* 复制成功后的操作 */var $copysuc = $("<div class='copy-tips'><div class='copy-tips-wrap'>☺ 复制成功</div></div>");$("body").find(".copy-tips").remove().end().append($copysuc);$(".copy-tips").fadeOut(3000);}});

  

8.文件上传绑定的onchange事件,用的ajaxfileupload.js   但是change事件第二次失效。
用juqery.upload.js解决了。
$('#img').fileupload({add: function(e, data) {var uploadErrors = [];var acceptFileTypes =  /^image\/(gif|jpe?g|png)$/i;if (data.originalFiles[0]['type'].length && !acceptFileTypes.test(data.originalFiles[0]['type'])) {uploadErrors.push('传入的格式不对');}if (data.originalFiles[0]['size'].length && data.originalFiles[0]['size'] > 5000000) {uploadErrors.push('所选图片太大');}if (uploadErrors.length > 0) {alert(uploadErrors.join("\n"));} else {data.submit();}},url: env.api + "liveman/panorama/panora/cover",dataType: 'json',autoUpload: true,//成功done: function(e, data) {_self.flagImg = true;_self.dataObject.coverUrl = data.result.data;},//失败fail: function(e, data) {console.log(data);}});

  

9.form表单的提交不跳转
html:
<form method="post" name="testForm" id="showDataForm" enctype="multipart/form-data" v-bind:action="url" ><label for="video_file" class="labelText col-sm-4 text-right">视       频</label><div class="col-sm-2"><input type="file" id="video_file" name="video_file"></div><div class="col-sm-1"><button type="submit" class="submit" >提交</button></div></form>

  

js:
 $("#showDataForm").on('submit',function(event) {$("#showDataForm").ajaxSubmit(function(message) {// 提交表单的返回值// console.log(message);if(message.code == 0) {alert("视频上传成功");}else {alert('视频上传失败');}});return false; // 必须返回false,否则表单会自己再做一次提交操作,并且页面跳转});

  

10.XMLHttpRequest上传文件做进度条
//进度条函数
function videoUploadProgress(evt) {if (evt.lengthComputable) {var percentComplete = Math.round(evt.loaded * 100 / evt.total);_self.progressBar = percentComplete;}else {console.log(".......")}}//文件上传成功函数function videoUploadComplete(evt) {var response = JSON.parse(evt.currentTarget.response);if(response.code == 0){_self.flagVideo = true;alert("视频上传成功");}}//文件上传函数function uploadVideo(url) {var xhr = new XMLHttpRequest();var fd = new FormData();fd.append("show_form", document.getElementById('video_file').files[0]);xhr.upload.addEventListener("progress", function(){videoUploadProgress(event)}, false);xhr.addEventListener("load", videoUploadComplete, false);xhr.open("POST", url);console.log(url);xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");xhr.send(fd);}$("#submit").on('click',function(){uploadVideo(_self.url);});

  

11.绑定图片
<img v-bind:src="item.image">

12.绑定value到Vue实例的一个动态属性上
对于单选按钮,勾选框及选择框选项,v-model绑定的value通常是静态字符串(对于勾选框是逻辑值):
13.vue页面闪烁问题{{message}}
样式:
[v-cloak]{
display:none;
}

dom:
<div v-cloak>{{message}}</div>

  

14.vuejs中过渡动画
样式:
.staggered-transition {transition: all .5s ease;/*overflow: hidden;*/margin: 0;}.staggered-enter,.staggered-leave {opacity: 0;}

dom:
<li class=" treeview" v-for="menu in menus |search" v-bind:class="{'active': searchVal!=''||$index == activeMemuIndex}" transition="staggered" stagger="100">

  

15.局部样式
<style scoped></style>

  支持sass

<style scoped lang='sass'></style> 

16.webpack区分测试环境、开发环境和正式环境
package.json:
"scripts": {"start": "webpack-dev-server --inline","test": "webpack","build": "webpack"},

  

webpack.config.js:
if (TARGET === 'start') {module.exports.plugins = [new webpack.DefinePlugin({'env': {api: '"kkk"'         测试环境}}),new TransferWebpackPlugin([{ from: 'exter' }], path.resolve(__dirname, "src")),new TransferWebpackPlugin([{ from: 'login' }], path.resolve(__dirname, "src"))]module.exports.devtool = '#source-map'} else {module.exports.plugins = [new webpack.DefinePlugin({'env': {api: '"kkk"'      发布环境}}),new TransferWebpackPlugin([             文件拷贝{ from: 'exter' }], path.resolve(__dirname, "src")),new TransferWebpackPlugin([{ from: 'login' }], path.resolve(__dirname, "src"))]module.exports.devtool = '#source-map'
}

  

17.window.open()新窗口
window.location=当前窗口
18.公用模态框组件(父子组件通信)
export default  {props: {modal: {title: '',content: '',flag: '',id: '',show: false,num: ''},focusList: []},methods: {refresh: function() {this.deleteFocusSure();},deleteFocusSure: function(id) {//确定删除var _self = this;$.ajax({url: 'url',data: {id: _self.modal.id},success: function(data) {if(data.meta.code == 200) {for (let i = 0; i < _self.focusList.length; i++) {if(_self.focusList[i].id == _self.modal.id) {_self.focusList.splice(i,1);_self.modal.show = false;_self.$dispatch('focusList', _self.focusList); //通知}}}},err: function(err) {console.log(err);}});},},events: { //通知'refresh' () {this.refresh();}},
}

  

html:
<modal-file :modal="modal" :focus-list="focusList"></modal-file>

  

js:
import modalFile from './modalFile.vue';
export default {data() {return {focusList: [],modal: {}}},components: {modalFile},methods: {deleteFocus: function(id) {//删除this.modal = {show: true,title: '删除',content: '确定删除该数据?',flag: 1,id: id}},Preview: function(data,type,userid) {//预览var _self = this;if(type == 3 ) {$.ajax({url: 'ur',data: {liveid:data,type:3},success: function(data) {var activityId = data.data;_self.modal = {show: true,title: "直播预览",flag: 2,id: activityId,}}}); }}     },
events: { //刷新// 分页组件传回的表格数据(这里即为服务器传回的数据)'data' (data) {this.focusList = data.data.data;console.log(this.focusList);},'focusList' (focusList) {//删除后的刷新this.focusList = focusList;}}
}

  

19.watch的使用
watch: {'selectedType': 'getPlaceholder'}

'selectedType':是data里面定义的变量;
'getPlaceholder':是methods里面定义的方法
20.vue的分页组件 pageBage.vue
<!-- 表格分页组件 -->
<template><nav class="boot-nav"><ul class="pagination boot-page"><li><a href="javascript:void(0)"  @click="wholePrevClick()"><span aria-hidden="true">第一页</span></a></li><li><a href="javascript:void(0)" aria-label="Previous" @click="onPrevClick()"><span aria-hidden="true">«</span></a></li><li v-for="page in pages" :class="activeNum === $index ? 'active' : ''"><a href="javascript:void(0)" v-text="page" @click="onPageClick($index)"></a></li><li><a href="javascript:void(0)" aria-label="Next" @click="onNextClick()"><span aria-hidden="true">»</span></a></li><li><a href="javascript:void(0)"  @click="wholeNextClick()"><span aria-hidden="true">最后一页</span></a></li></ul><div class="page-total">共 <span v-text="pageTotal"></span> 页</div></nav>
</template><script>
export default {props: {// 页码pages: {type: Array,default: function () {return [1]}},// 每页显示个数len: {type: Number,default: 10},// 表格数据(数组)data: {type: Array,default: function () {return []}},// AJAX地址url: {type: String,default: ''},//当前页的字段currentPage: {type: String,default: ''},totalPages: {type: String,default: ''},totalName: {type: String,default: ''},// 显示页数pageLen: {type: Number,default: 10},// 总页数pageTotal: {type: Number,default: 1},// 参数内容param: {type: Object,default: function () {return {}}},//methodmethod:{type:String,default:'get'}},data () {return {activeNum: 0,first: -1,last: -1}},methods: {// 第一页wholePrevClick: function() {this.first = 1;var newPages = [];for (let i = 0; i < this.pages.length; i++) {newPages[i] = i +1;}this.pages = newPages;this.activeNum = 0;this.getData();},// 最后一页wholeNextClick: function() {this.last = this.pageTotal;var newPages = [];for (let i = 0; i < this.pages.length; i++) {newPages[this.pages.length-i-1] = this.pageTotal-i;}this.pages = newPages;this.activeNum = this.pages.length-1;this.getData();},pageMake: function(index) {let newPages = [];let len2 = parseInt(this.pages.length/2);if(this.pages[index] <= len2 || this.pageTotal <= this.pageLen || this.pages[index] > this.pageTotal-len2) {for (let i = 0; i < this.pages.length; i++) {newPages[i] = this.pages[i];}this.activeNum = index;}else if( this.pages[index] <= this.pageTotal-len2) {for (let i = 0; i < this.pages.length; i++) {newPages[i] = this.pages[index]-len2+i;}this.activeNum = len2;}this.pages = newPages;this.getData();},// 点击页码刷新数据onPageClick (index) {this.pageMake(index);},// 上一页onPrevClick () {// 当前页是否为当前最小页码if (this.activeNum > 0) {// this.activeNum = this.activeNum - 1;let index = this.activeNum -1;this.pageMake(index);} else {if (this.pages[0] !== 1) {let newPages = []for (let i = 0; i < this.pages.length; i++) {newPages[i] = this.pages[i] - 1}this.pages = newPagesthis.getData()}}},// 下一页onNextClick () {// 当前页是否为当前最大页码if (this.activeNum < this.pages.length - 1) {// this.activeNum = this.activeNum + 1let index = this.activeNum + 1;this.pageMake(index);} else {if (this.pages[this.pages.length - 1] < this.pageTotal) {let newPages = []for (let i = 0; i < this.pages.length; i++) {newPages[i] = this.pages[i] + 1}this.pages = newPagesthis.getData()}}},// 获取页码getPages () {this.pages = []// 比较总页码和显示页数if (this.pageTotal <= this.pageLen) {//console.log(this.pageTotal+"....."+this.pageLen)for (let i = 1; i <= this.pageTotal; i++) {this.pages.push(i)}} else {for (let i = 1; i <= this.pageLen; i++) {this.pages.push(i)}}},// 页码变化获取数据getData () {var _self = this;this.param[_self.currentPage] = this.pages[_self.activeNum];this.param.rows = this.len;if( this.first!= -1) {this.param[_self.currentPage] = this.first;this.first = -1;}else if (this.last != -1) {this.param[_self.currentPage] = this.last;this.last = -1;}$.ajax({url: this.url,method: this.method,data: this.param,dataType: 'json',success: function(data) {if(_self.totalName) {_self.pageTotal = Math.ceil(data.data[_self.totalName][_self.totalPages]/ _self.len);}else {_self.pageTotal = Math.ceil(data.data[_self.totalPages]/ _self.len);}if (_self.pages.length !== _self.pageLen || _self.pageTotal < _self.pageLen) {_self.getPages();}_self.$dispatch('data', data)},error: function(err) {// console.log(err);}});},refresh () {this.pages = [1]this.activeNum = 0this.getData()}},ready () {this.getData();this.getPages();},events: {'refresh' () {this.refresh();}}
}</script><style scoped>
.boot-select {float: left;width: 80px;
}.boot-nav {float: right;
}.boot-page {display: inline-block;margin: 2px 10px 0 20px;vertical-align: middle;
}.page-total {display: inline-block;vertical-align: middle;
}
</style>

  

21.watch
定义了一个对象类型的数据(例如:obj),改变了属性(例如:obj.name),触发不了watch事件。
22.img
dom:
  < img :src="img"/>

  

js:
data() {return {img: require('../../login/login/imgs/progress.gif') } }

  

23.vue-resource:http://www.doc00.com/doc/1001004eg
24.子组件的索引:
1. 直接用$children索引,
this.$children[index]

2. 为组件添加索引ID后通过id获取:
template:  <live-player v-ref:liverplayer :live-title="liveTitle" :live-src="liveSrc"></live-player>script:  this.$refs.liverplayer

  注意:如果v-ref:liverplayerM再用this.$refs.liverplayerM会取不到值(因为用了驼峰法吧)。

 25.设置了disabled的a标签置灰但是@click的点击仍然可用

转载于:https://www.cnblogs.com/lhy-93/p/5741257.html

初用vue遇到的一些问题相关推荐

  1. vue 将字符串最后一个字符给替换_初尝VUE

    VUE的两个版本 VUE分为完整版(vue.js)和非完整版(vue.runtime.js) 二者的区别在于完整版的VUE(vue.js)会包含一个编译器,由于这个编译器的存在,完整版VUE(vue. ...

  2. 【Vue】【Router】手动跳转用 this.$router.push() 时 $router 未定义的问题

    初入Vue,手写路由跳转时的问题: toXxxRoute: () => {this.$router.push({'path': '/xxx', 'name': 'xxx'}) } 由于使用了箭头 ...

  3. 二、Vue基础语法学习笔记——事件监听v-on、条件判断(v-if、v-else-if、v-else、v-show)、循环遍历(v-for遍历数组对象,key属性、检测数组更新)、图书案例、双向绑定

    四.事件监听 在前端开发中,我们需要经常和用于交互. 这个时候,我们就必须监听用户发生的时间,比如点击.拖拽.键盘事件等等 在Vue中如何监听事件呢?使用v-on指令 v-on介绍 作用:绑定事件监听 ...

  4. 【JS】正则表达式。以vue词法分析、句法分析为例

    1,声明 其声明和其他的基本类型类似,都可以用字面量声明,或者包装类声明: console.log(/abc/g); // /abc/gconsole.log(new RegExp("abc ...

  5. Vue.js 框架从入门到精通,只需要它!

    点击蓝字 关注我们 你还在一行一行低效代码吗?你还在不停地操作 DOM 吗?你的代码还会频繁出现 CSS.Javascript 配置文件冲突吗? Vue3 框架快速解决你的代码低效问题! 01 Vue ...

  6. 从零吃透 Vue.js 框架,这里全部有!

    点击蓝字 关注我们 你还在一行一行低效代码吗?你还在不停地操作 DOM 吗?你的代码还会频繁出现 CSS.Javascript 配置文件冲突吗? Vue3 框架快速解决你的代码低效问题! 01 Vue ...

  7. 不变的就是变化本身(Vue学习笔记one)

    奋斗是这么个过程,当时不觉累,事后不会悔.走一段再回头,会发现一个更强的自己,宛如新生. 你好,我是梦阳辰!期待与你相遇! 文章较长,切勿心急气躁,否则将一事无成! 学习Vue前,我们需要先了解一些M ...

  8. Vue项目开发中一些常见问题

    问题汇总 问题:安装超时(install timeout) 方案有这么些: cnpm : 国内对npm的镜像版本 /* cnpm website: https://npm.taobao.org/ */ ...

  9. VUE 常见问题汇总

    问题汇总 Q:安装超时(install timeout) 方案有这么些: cnpm : 国内对npm的镜像版本 /* cnpm website: https://npm.taobao.org/ */ ...

  10. v-for 获取数组key value_Vue之路 | 05von、vif、vfor

    点击左上方"熊吱"关注我们吧! 1 事件监听 在开发中,需要监听用户发生的事件,如点击.拖拽.键盘操作等,在Vue中,使用v-on指令绑定事件监听器. v-on的语法糖为:@ v- ...

最新文章

  1. vb.net怎么调用fastreport报表_零编码制作报表可能吗?
  2. ArcGIS Engine 中的多线程使用
  3. mac python3打包成窗体程序_python3代码打包成mac的程序,没办法运行,各位大神请指导一下...
  4. IO流介绍、java常用的几个IO流类之间的区别,以及各自的用法、使用场景
  5. 【转】C# 中文URL编码
  6. java webpack_webpack将对象暴露为全局
  7. python选择题题库for、if_Python题目1:猜年龄(for、if else和where)
  8. 函数wait、waitpid、孤儿进程、僵尸进程
  9. Oracle导入dmp文件报12504,ORA-12504:TNS :监听程序在 CONNECT_DATA 中未获得SERVICE_NAME...
  10. java中解决request中文乱码问题
  11. 蓝桥杯省赛真题C++java2013-2019
  12. dojo mobile问题汇总
  13. c语言编写生日祝福语大全,过生日的祝福语
  14. convert bitset descriptor - cv::Mat
  15. 【好网】通信专业的大四研一研二看看:以求职经验教你选择导师专业和科研方向...
  16. 安大计算机学院李伟教授,安徽大学高教所研究生导师聘任仪式在我校举行
  17. PHP高效生成一个不重复随机数
  18. the markup in the document preceding the root element must be well-formed
  19. windows的navicat 连接 linux的mysql服务器问题汇总
  20. win10利用Dism修复系统

热门文章

  1. LeetCode 中文刷题手册:LeetCode Cookbook下载
  2. 极大似然函数求解_快速理解极大似然法
  3. App Inventor 实现简单计步器
  4. 基于Python的开源人脸识别库:离线识别率高达99.38%(转)
  5. SaaSBase:最适合小团队轻量级项目管理的软件——Tower
  6. Appium自动化测试原理
  7. typora 免费版, 最后一个beta版本下载
  8. 饿了么ui 下拉框远程搜索 绑定清空原始数据
  9. php composer 无法下载,composer给laravel下载扩展包 无法下载的问题
  10. python弹窗炸弹