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的话只有单向的绑定,栗子如下:
<div id="my_test" :style="my_style">这样的话,my_style数据发生了改变会更新到这个dom元素上,但是dom元素的操作不会更新my_test数据。
v-model则相反:
首先,v-model一般用于input这类的标签上,<input v-mode="my_test">这就是一个双向绑定了,dom元素的操作会更新数据,数据的操作也会更新dom元素。

5.关于Vue中export的data:

<template>
    <div id="test">
        {{test}}
    </div>
</template>

<script>
export default {
    name:"test",
    // 注意这里
    data:()=>({
        test:"this is a test !"
    })  
}
</script>

第二种写法:
<template>
    <div id="test">
        {{test}}
    </div>
</template>

<script>
export default {
    name:"test",
    // 注意这里!
    data(){
        return {
            tsest:"this is a test !"
        }
    }
}
</script>

6.关于Vue的跨域

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


路径.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方法,导致无法改变数据。

<template>
    <div id="app">
        <input v-for="(item,key) in test" :key="key" v-model="item.model"/>
    </div>
</template>

<script>
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
        }
    }
}
</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,673评论 18 139
  • 摘要:SQL Server死锁的捕获、分析和解决方法。 一、什么是死锁? 简单来说,我和你,金锁和银锁。 我拿着金...
    暖夏未眠丶阅读 1,441评论 0 0
  • ——李笑来@学习学习再学习《惊喜的定义与创造惊喜的方法论》笔记整理 本文主旨: 什么是惊喜:意外的新发现,机缘巧合...
    勇哥在进化阅读 878评论 0 0
  • 簡介 確定親子或非親子關係;不同類型的親子鑑定測試中,隻有產前親子鑑定才能在胎兒出生以前鑒定父子關係。 樣本6ml...
    HKLAB阅读 674评论 0 0
  • 在2016年还剩下三天的时候,我也还剩下很多关于你的话,没有讲。 这只是发生在2016年中的一个小故事,我没忘记,...
    小從阅读 154评论 0 1