vue——踩坑

1、vue文件一般放在html标签之后,因为vue实例需要绑定在html标签上,所以需要先加载html元素

2、如果需要在vue文件中的style标签中使用less来书写css样式,需要在style标签中添加lang='less'属性,但是需要安装less模块

<template>
    <div class="app">
        
    </div>
</template>

<script>
    export default {
        
    }
</script>

<style lang='less'> //默认为lang='css'此处添加lang='less'可以使用less模块编写css样式
    
</style>

3、在build文件夹下的webpack.base.conf.js文件中,定义了src目录的绝对路径,使用@代替

resolve: {
    extensions: ['.js', '.jsx', '.vue', '.json'],
    alias: {
      'vue$': 'vue/dist/vue.esm.js',
      '@': resolve('src'),
    }
  },

4、导入导出

在 Vue 中,默认使用 export default 导出模块,在导入的时候直接使用 import App from './App' 即可,可以自定义模块名称,如果使用 es6 的 export 导出模块的话,在导入的时候需要使用结构赋值 import {Test} from './test' 不能自定义模块名

//导出模块,文件名为test.js
export default {
    test1(){
        console.log(12346);
    }
}
export function Test1(){
    console.log('Test1');
}


//导入模块
import test,{Test1} from './test';

import * as test from './test' //把test文件中导出的所有对象都存放到test中,包括export导出的对象以及export default导出的对象

在模块中使用 import * from './test' 可以把 test.js 文件中所有导出的成员导入到该文件中,可用于模块的‘继承’

5、在 webpack 环境下开发使用 vue ,不能直接导入vue文件,需要导入 vue/dist/vue.esm 的js文件

6、vue-router在使用history模式的时候,不能使用 a 标签来链接地址,否则不能正常跳转,使用 <router-link to='/new'></router-link> 标签可以正常连接跳转,也就是 a 标签在 history 模式下不能正常跳转, router-link 标签可以适配 hash 以及 history 路由模式 ;vue-router在编写子路径的时候,必须在母路径组件中添加 <router-view /> 标签才能生效

7、flex 不适配 IE9 - ,任何基于flex的插件都不适配IE9 -

8、vue组件中style中的 scoped 属性是解决CSS样式作用域问题的,如果在不同组件中使用了同一个类名或者ID,在 style 标签中加入 scoped 可以生成CSS作用域,vue会动态在标签中加入data-v-哈希值 标签用于区分不同的CSS作用域,使用 scoped 会产生性能问题,如果使用第三方插件或者使用了JS动态加入标签,会造成CSS作用域失效,所以尽量不要使用 scoped 属性,也就是在不同的组件中不要使用相同的类型或者ID

9、iview所使用类名并不是标签名,element 使用的标签名就是类名,Iview 在使用单标签(如 Input)时,需要加上标签结束符(如<Input />),也可以使用双标签,部分vue插件会报错,可以忽视,如果需要在单标签中插入内容,不能使用标签结束符( / ),并且要使用双标签形式,如在 input 中插入图标

<template>
    <Layout class="page">
        <Form class="login">
            <FormItem>
                <Input placeholder="帐号">
                    <span slot="prepend">
                        <Icon type='ios-contact'/>
                    </span>
                </Input>
            </FormItem>
            <FormItem>
                <Input placeholder="密码" type="password">
                    <span slot="prepend">
                        <Icon type='ios-lock'/>
                    </span>
                </Input>
            </FormItem>
        </Form>
    </Layout>
</template>

10、在项目的config目录下的index.js文件中,把 autoOpenBrowser 对象设置为 true 可以在运行运行项目的时候自动打开浏览器

11、当需要修改UI框架的样式时,不要在有scoped属性的样式表中修改,可以在app.vue中修改

12、在使用computed计算属性时,需要注意,computed属性中定义的方法只具备get属性,无法修改该方法返回的值,如果需要在其他地方可以修改改变量,可以把该变量设置为属性,在属性中添加get、set方法

computed:{
    num(){
      return 1+1
    }
}


改为:=>

computed:{
    num{
      get(){
         return 1+1
      },
      set(val){
         this.num1=val
      }
    }
}

13、watch递归深度监听

    如果watch监听一个属性的下一级变化时,你会发现,并不能得到你需要的效果,watch默认是不会深度遍历被监听对象的,需要在被监听属性添加deep属性

//默认watch监听
watch:{
    num(newVal,oldVal){
      console.log(newVal)
    }
}

改为=>

watch:{
    num:{
      handler(newVal,oldVal){
       console.log(newVal
      },
      deep:true   //深度监听
    }
}

14、在vue中,有且仅有以下观察数组的变异方法(会改变原数组的方法)会触发视图更新

    push()、pop()、shift()、unshift()、splice()、sort()、reserve()

  需要注意的是,以下两种情况都无法触发vue的数组检测

      1、你利用索引直接设置一个数组项时例如:vm.items[indexOfItem] = newValue

  2、修改数组的长度时,例如:vm.items.length = newLength

var vm = new Vue({
  data: {
    items: ['a', 'b', 'c']
  }
})
vm.items[1] = 'x' // 不是响应性的
vm.items.length = 2 // 不是响应性的

可以使用以下方法触发更新

Vue.set(vm.items, indexOfItem, newValue)
// 或者使用全局方法
vm.$set(vm.items, indexOfItem, newValue)

15、在vue中,使用compute以及watch都可以监听发一个数据的变化,他们之间的区别在于:compute监听的属性不可以在data对象中存在,也就是compute属性会创建该监听对象并监听他变化,而watch属性则不会创建监听对象,compute与watch之间另一个区别在于,如果被监听对象重复赋值了,并且值是一样的(就是数据没有改变),则不会执行watch中的语法,而在compute属性中,无论值是否改变,都会执行

15、vue有一个内置的组件<template/> ,它的作用是用来装载html元素的,他自己不会被编译成标签,只会把里面的内容带进去,所以它不会打破原有的布局,尤其是在solt插槽中使用比较常见

16、父组件可以通过$child获取子元素的内容,但是,需要在mounted钩子之后获取,子组件可以通过$parent获取父组件内容,可以在created之后获取

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值