vue中常碰见的坑_Vue中遇到过的坑

1.在侦听器中无法侦听对象内的属性,这时候可以用计算属性先返回想要侦听的属性,或者用深度侦听 deep。

computed: {

editor() {

return this.$refs.TextEditor.quillEditor

},

site_id(){

return this.setForm.site

},

},

watch:{

site_id:function(){}

}

2.这个坑算是axios的,axios在默认的情况下是不带cookies的,要让它带上cookies需要在vue中的main.js进行设置:

axios.defaults.withCredentials=true;

3.vue与Django结合的时候会有一个csrf_token的问题,对于这个问题,解决的办法是先安装Django-cors-headers,并在django中的settings中进行设置:

# 先在APP里面进行添加:

INSTALLED_APPS += 'corsheaders'

# 再在最后追加内容:

APPEND_SLASH = False

CORS_ORIGIN_ALLOW_ALL = True

CORS_ALLOW_CREDENTIALS = True

CORS_ORIGIN_WHITELIST = ()

CORS_ALLOW_METHODS = (

'DELETE',

'GET',

'OPTIONS',

'PATCH',

'POST',

'PUT',

'VIEW',

)

# * 表示接受所有的头

CORS_ALLOW_HEADERS = (

'accept',

'accept-encoding',

'authorization',

'content-type',

'dnt',

'origin',

'user-agent',

'x-csrftoken',

'x-requested-with',

'x-file-name',

'identity',

)

4.Vue中v-bind和v-model的区别:

V-bind的话只有单向的绑定,栗子如下:

这样的话,my_style数据发生了改变会更新到这个dom元素上,但是dom元素的操作不会更新my_test数据。

v-model则相反:

首先,v-model一般用于input这类的标签上,这就是一个双向绑定了,dom元素的操作会更新数据,数据的操作也会更新dom元素。

5.关于Vue中export的data:

{{test}}

export default {

name:"test",

// 注意这里

data:()=>({

test:"this is a test !"

})

}

第二种写法:

{{test}}

export default {

name:"test",

// 注意这里!

data(){

return {

tsest:"this is a test !"

}

}

}

6.关于Vue的跨域

上面django中跨域的方法是通过后端来设置请求头的方式,但在Vue中可以在config中的index.js来配置开发服务器的代理:

caa9802d6649

路径.jpg

// 更新proxyTable:

// 将Vue默认的host下的/api(http://localhost:8080/api/xxx)代理到 http://localhost:3001/api/xxxx

proxyTable: {

'/api':{

target:'http://localhost:3001/api',

changeOrigin: true,

// 重写相应的路径

pathRewrite:{

'^/api':'^/api'

}

}

},

缩减Vue工程生成的js文件的大小

一般来讲,直接npm run build 生成的文件工程文件都普遍偏大,这时候我们可以通过开启gzip的方式来减小打包后生成的文件大小:

首先安装compression-webpack-plugin这里注意要安装1.1.12版本的才行!: npm i compression-webpack-plugin@1.1.12

然后开启gzip压缩,在Vue-cli生成的config文件夹中index.js进行设置:productionGzip: true,

最后设置webpack.prod.conf.js:

webpackConfig.plugins.push(

new CompressionWebpackPlugin({

// 设置这里的asset为filename

filename: '[path].gz[query]',

algorithm: 'gzip',

test: new RegExp(

'\\.(' +

config.build.productionGzipExtensions.join('|') +

')$'

),

threshold: 10240,

minRatio: 0.8

})

)

}

Vue中计算属性传参

Vue的计算属性本身是不能传参的,只能通过闭包来实现传参的操作,具体的代码如下:

:data="closure(item, itemName, blablaParams)"

computed: {

closure () {

return function (a, b, c) {

/** do something */

return data

}

}

}

Vue中v-model的坑,循环动态改变一个json将导致这个json中被v-model绑定的元素失去Vue中默认的getter和setter方法,导致无法改变数据。

const datas = {

data: {name:'test1'},

data2: {name:'test1'},

}

export default {

name: 'app',

data() {

return {

test: {}

}

},

methods: {

change() {

// 这样将导致失去getter和setter方法,导致v-model失效:

for(let key in datas) {

this.test[key] = {...datas[key],model: ""}

}

// 可以用一个变量来装上面循环生成的数据,再将test一次性赋值成为这个数据:

let _data = {}

for(let key in datas) {

_data[key] = {...datas[key],model: ""}

}

this.test = _data

}

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值