Vue实例问题集锦

1、引入bootstrap报错“Module parse failed”
原因 :编译器无法加载bootstrap.css,导致webpack无法打包
(1)需要自行安装style-loader、less-loader、css-loader,在终端输入npm i style-loader less-loader css-loader –save-dev
(2)在webpack.config.js中module.exports->modules->rules中添加

 { test: /\.css$/, loader: "style-loader!css-loader" },
 {test: /\.less$/, loader: "style-loader!css-loader!less-loader"},
 { test: /\.(eot|woff2|ttf|woff)$/, loader: "file-loader" }

前两行是对css文件和less文件进行加载,最后一行是对bootstrap.css文件中以eot|woff2|ttf|woff结尾的文件进行加载。

2、 on emit的用法-组件直接传值
(1)在同一个实例上,这里this指的是vue实例

this.$emit('touch','hello')
this.$on('touch',function(a){
    alert(a);
})

(2)不在同一个实例上,需要
a、新建bus.js

import Vue from 'vue'
export var bus = new Vue()

b、App.vue里created方法里定义事件

import { bus } from 'bus.js'
// ...
created () {
  bus.$on('tip', (text) => {
    alert(text)
  })
}

c、Test.vue组件内调用

import { bus } from 'bus.js'
 // ...
bus.$emit('tip', '123')

3、element-ui中el-tabs选项卡的切换
HTML部分

<el-tabs v-model="activeName" type="border-card" value="scan" id="tabs">
        <el-tab-pane label="所有便利贴" name="scan">
          <ScanStickNote></ScanStickNote>
        </el-tab-pane>
        <el-tab-pane label="创建便利贴" name="create">
          <CreateStickNote></CreateStickNote>
        </el-tab-pane>
      </el-tabs>
      <el-button type="primary" @click="exchange">切换</el-button>

js部分

export default {
    name: 'app',
    data () {
      return {
        activeName: 'scan'
      }
    },
    components:{ElButton, ScanStickNote,CreateStickNote},
    methods:{
      exchange(){
        alert('exchange');
        this.activeName = 'scan';
      }
    },

4、vue中的路由传参,router和route要分清楚
A.vue

this.$router.push({path:'./success',query:{msg:'message'}});

B.vue

{{this.$route.query.msg}}

5、父组件向子组件传值
父组件:

<child flag="myFlag"></child>

子组件:

<template>
    <div>{{flag}}</div>
</template>
export default {
    components: {ElButton}, name: 'app',
    data () {
      return {
        stickNote: this.$store.state.stickNote,
      }
    },
    props:['flag']
  }

6、子组件向父组件传值
子组件CreateStickNote 中代码:

this.$emit('send');

父组件中代码:

<CreateStickNote  v-on:send="exchange"></CreateStickNote>

methods:{
      exchange(){
        alert('exchange');
        this.activeName = 'scan';
      }
    },

7、JS箭头函数在event bus中的应用(在$on中更新data值)

vuejs2.0开始提倡使用event bus这个机制来实现代码解耦和任何模块之间的数据通信,非常强大,但是使用中可能会遇到这样的困惑:在event handler中的this指针怎么才能够引用到event handler所在的vue instance呢?这时ES6的=>arrow函数就起到了作用,因为它不会改变this指针:

bus.$on('success',() => {
        this.activeName = 'scan';
      })

以上代码中this指的是该段代码所在的vue实例对象,对activeName赋值正确

bus.$on('success',function(){
        this.activeName = 'scan';
      })

以上代码中this指的是bus对象,该对象中没有activeName,因此赋值错误,可以将两次的this打印出来就明白了。

箭头函数和function函数的区别:
(1)箭头函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
(2)箭头函数不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
(3)箭头函数不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用Rest参数代替。
(4)不可以使用yield命令,因此箭头函数不能用作Generator函数。

在这里附上一个vue-cli的小demo:https://github.com/1562428495/vue-cli-webpack-MongoDB-express

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值