初用vue遇到的一些问题

1.过滤器:

filters: {

search(list) {         es5

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) {              es6

return list.filter(menulist => menulist.name.indexOf(this.searchVal) > -1);

}

},

2.ajax:

方法一:在写ready里面

ready: function() {

var _self = this;

// console.log(env.api)

$.ajax({

url: env.api + ‘authority/user/loadMenusAndUser‘,

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);

}

})

},

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: env.api + ‘authority/user/loadMenusAndUser‘,

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: env.api + "bike/manage/importIMEIExcel",

type: ‘post‘,

secureuri: false, //是否启用安全提交,默认为false

fileElementId: ‘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">视&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;频</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: ‘"http://localhost:8888/v1/"‘         测试环境

}

}),

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: ‘"http://localhost:8888/v1/"‘      发布环境

}

}),

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: env.api + "liveman/focuspic/piclist/delete",

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();

}

},

}

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

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: env.api + "liveman/focuspic/piclist/preview",

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的分页组件

21.watch

定义了一个对象类型的数据(例如:obj),改变了属性(例如:obj.name),处罚不了watch事件。

22.img

dom:

< img :src="img"/>

js:

data() {

return {

img: require(‘../../login/login/imgs/progress.gif‘)

}

}

时间: 2024-08-09 22:01:01

初用vue遇到的一些问题的相关文章

Vue之初配置记录篇

环境为Centos7,首先下载nodejs和npm的压缩包,两个在一起的,解压后进入bin目录,用ln -s 命令把里面的npm和node软连接到/usr/bin/目录下,然后退出此目录,node -v查看版本及检查安装成功. 再次进入刚刚解压的bin目录,输入命令 npm install -g cnpm --registry=https://registry.npm.taobao.org 安装淘宝镜像,此方法借鉴的菜鸟教程的vue教程.(安装完成后可能也要软连接一下) 安装webpack打包器

Vue.js:轻量高效的前端组件化方案(转载)

摘要:Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统.在前端纷繁复杂的生态中,Vue.js有幸受到一定程度的关注,目前在GitHub上已经有5000+的star.本文将从各方面对Vue.js做一个深入的介绍. Vue.js 是我在2014年2月开源的一个前端开发库,通过简洁的 API 提供高效的数据绑定和灵活的组件系统.在前端纷繁复杂的生态中,Vue.js有幸受到一定程度的关注,目前在 GitHub上已经有5000+的star.本文将从各方面对Vue.js做一个深入的介绍. 开发

【转】手摸手,带你用vue撸后台 系列四(vueAdmin 一个极简的后台基础模板)

前言 做这个 vueAdmin-template 的主要原因是: vue-element-admin 这个项目的初衷是一个vue的管理后台集成方案,把平时用到的一些组件或者经验分享给大家,同时它也在不断的维护和拓展中,比如最近重构了dashboard,加入了全屏功能,新增了tabs-view等等.所以项目会越来越复杂,不太适合很多初用vue的同学来构建后台.所以就写了这个基础模板,它没有复杂的功能,只包含了一个后台需要最基础的东西.vueAdmin-template 主要是基于vue-cli w

浅谈Vue响应式(数组变异方法)

很多初使用Vue的同学会发现,在改变数组的值的时候,值确实是改变了,但是视图却无动于衷,果然是因为数组太高冷了吗? 查看官方文档才发现,不是女神太高冷,而是你没用对方法. 看来想让女神自己动,关键得用对方法.虽然在官方文档中已经给出了方法,但是在下实在好奇的紧,想要解锁更多姿势的话,那就必须先要深入女神的心,于是乎才有了去探索Vue响应式原理的想法.(如果你愿意一层一层地剥开我的心.你会发现,你会讶异-- 沉迷于鬼哭狼嚎 无法自拔QAQ). 前排提示,Vue的响应式原理主要是使用了ES5的Obj

快速入门vue-cli配置

作为一名使用了一段时间Vue.js的新手,相信和不少初入Vue的朋友一样,都对Vue-cli的配置一知半解.后来通过对webpack的学习,也算是对脚手架的配置有了一定的了解,所以也想把这段时间自己的成果分享给大家,希望能和大家一起进步. 有两点要说明的: 阅读本文需要了解一点点webpack的知识,至少要entry,output,module,plugins都是做什么,以及一些常用的loader和plugins: 本文使用的是最新版的vue,配置可能会和大家的有所不同,不过差距不会太大,不影响

年薪30W前端程序员,需要吃透的前端书籍推荐

随着互联网时代的发展,web进入2.0时代,前端开发的岗位逐渐独立出来,大量的前端程序员工资和技术水平飙升.前端框架层出不穷,新技术不断更新,作为前端的程序员也是倍感吃力.但为了高薪,每一个前端开发者,都在不断的学习新技术,啃底层.今天小编为大家推荐一个前端程序员必须要吃透的书籍! <JavaScript DOM 编程艺术> 超级前端畅销书,作为前端程序员必读两遍以上的书籍,这本书籍特别适合初学前端的新人,前端的核心技术就是JavaScript,同时也是前端的难点.而这本书非常适合入门,通俗易

初印象至Vue路由

初印象系列为快速了解一门技术的内容,后续会推出本人应用这门技术时发现的一些认识. Vue路由和传统路由的区别: Vue路由主要是用来实现单页面应用内各个组件之间的切换,同样支持传递参数等功能.而传统路由使用超链接 以下内容来自官网,js使用ES6 如何在vue项目中使用vue-router HTML <script src="https://unpkg.com/vue/dist/vue.js"></script> <script src="htt

Vue.js之初印象

一.背景 MVVM模式,很多人在说在用,好吧,我落后了,我目前的项目木有用到MVVM模式的框架,vuejs,reactjs,angularjs,nonono,自己去捣鼓过ng,项目木有用到.实在不敢称自己是front-end developer.趁这个失业期,vuejs的学习起哟. 二.简介 1.vue.js是什么 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们

vue.js 初体验

Vue.js是什么? 一个构建数据驱动的web界面的库.他不是一个全能框架,技术上重点集中在MVVM中的ViewModel层. Vue.js特点? 轻巧.高性能.可组件化 官网地址:http://cn.vuejs.org/ Vue.js初体验 引入Vue.js独立版本, 至官网下载独立版本.根据提示,开发时选择开发版本. 直接引入Vue.js到静态页面中,从数据绑定开始编写DOM部分和js部分 <div id="app"> {{message}} </div>