Vue常见错误及解决方法:

Vue常见错误及解决方法:,第1张

Vue常见错误及解决方法:

1.[Vue-warn]: Missing required prop: "to"(found in component )

这个错误是少了个to或者是写错 ,正确写法为:

并且路由在做字符串拼接的时候,to要作为一个属性绑定

2.端口冲突错误:需要改端口,当然现在vue2.0中的webpack 已经自己会根据你的端口号进行改正,从8080往后面进

行递增,不会发生端口号冲突的情况,在vue1.0中会经常出现。

3.[Vue-warn]:Unknown custom element: - did you register the component correctiy?

错误1:引进来的vue-router没有use()

import Vue from 'vue'

import VueRouter from 'vue-router'

Vue.use(VueRouter)

错误2:在生成路由实例之后,没有将路由挂到我们的Vue实例上面

const router=new VueRouter({

mode:'history',//切换路径模式,变成history模式,不然路径为/#/home

scrollBehavior:()=>({ // 滚动条滚动的行为,不加这个默认就会记忆原来滚动条的位置

y:0

}),

// 注意这里的名称

routes

})

new Vue({

/* 4.最后挂到vue上 */

router,

el: '#app',

render: h =>h(App)

})

4.Uncaught TypeError: _vuex2.default.store is not a constructor

这个报错的是_vuex2.default.store 不是一个构造函数

因为在我们用vuex的时候需要将用到的actions,mutations模块最终导出,

在导出的时候new Vuex.Store中的Store小写了,这里的一定要大写,

就相当于我们在使用构造函数(类)的时候首字母要大写

import mutations from './mutations. js '

import actions from './actions. js '

export default new Vuex.Store({ //Vue.Stroe()首字母大写

modules:{ //这里注意mutations导出的是一个模块

mutations

},

actions

})

5.Moudel not found:Error:Can't resolve "style" in 'D:\vue-demo'

在vue1.0中,在webpack.config.js中配置css文件时

module:{

loaders:[

{

test:/\.css$/,

loader:'style!css'

}

]

}

在vue2.0中,在webpack.config.js中配置css文件时,必须要写全,不能和vue1.0一样简写

module:{

rules:[ //这里改成了rules

{

test:/\.css$/,

loader:'style-loader!css-loader' //这里必须要写全,不能和vue1.0一样简写

}

]

}

6.组件之间的通信从1.0过渡到2.0时引发的错误:

vue1.0实现父子组件的通信 -->通过props属性-->并且子组件可以更改父组件的数据 通过sync同步,

当在vue2.0里面不允许直接给父级数据做更改,并且把这个方法.sync去掉了,

当子组件再试图更改父组件的数据时,就会报错。

解决方法:

1.$emit()——单一事件管理

经常遇到的问题是找不到$emit()或$on(),这时需要单独准备一个文件Store.js

在文件里面需要:var oEvent =new Vue()

这个这个文件里的数据一定要导出去才可以使用:export default oEvent

2.对象之间的引用:(推荐使用)

vue1.0传数据:msg:'welcome' -->传给子级

vue2.0直接将数据定义成对象json的形式,这样传给子级的数据是对象的属性,即msg.title

这样子级修改父级的数据,修改的也是这个对象的一个属性msg.title

msg:{

title:'welcome'

}

msg.title

7.用vuex用来管理组件状态:(增加/减少,显示/隐藏)

8.axios目前不可以use,因为axios里面没有install这个方法

使用axios的时候,可以这样来使用:

1.将axios导入文件

import axios from 'axios'

2.将axios放入到Vue实例上面,这样在其他组件中,可以直接通过this.$https.get/post使用

在main.js中写:Vue.prototype.$http = axios

其他组件可以直接使用:

this.$http.get('data.txt').then((res)=>{

console.log(res.data)

}).catch((err)=>{

console.log(err)

})

9.element.ui表头点击事件

使用element.ui之后 @click="" 无法对表头等元素添加点击事件,正确的写法应该是@click.native=""

10.webpack2.0

插件的配置需要放到 plugins里面进行配置,不可放到rules里面进行配置

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

Vuex 可以帮助我们管理共享状态,并附带了更多的概念和框架。这需要对短期和长期效益进行权衡。

如果您不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。确实是如此——如果您的应用够简单,您最好不要使用 Vuex。一个简单的 store 模式 就足够您所需了。但是,如果您需要构建一个中大型单页应用,您很可能会考虑如何更好地在组件外部管理状态,Vuex 将会成为自然而然的选择。引用 Redux 的

我们的核心思想是要理解Vuex是是什么东西,用来做什么.

现在我们要把它(Vuex)看做是一个特殊的对象,是用来存放和提取的,所以要理解Vuex的关键是懂得存和取的思想.

下面进行配置:

(1).首先引进vue 和 vuex 并使用.

(2).声明一个变量存放vuex的基本配置

在这个对象里面要有两个特别关键的配置.

一个是存(state),一个是取state(mutations).

(3).最后再将其导出export default new Vuex.Store(options)

(现在可以用了!)

实例:需求APP底部有的页面需要底部有的页面不显示底部,在此我们使用Vuex 完成.

首先在state(储存)里设置 showFooter:false,默认不显示

2.为提取(getters)在getters里面设置一个函数并且将上面的state传入 ,返回里面的值showFooter,

3.设置 mutation用来修改state里面的属性值

4.接下来我们要引进路由守卫的概念,简单介绍一下:

路由守卫是指当用户满足了某些要求之后才可以离开或者进入某个页面或者场景的时候使用。 比如说只有当用户填写了用户名和密码之后才可以进入首页,比如说用户离开某个页面时明月保存信息提示用户是否保存信息后再离开等 *** 作,控制这些要求的就叫路由守卫。

此时我们来到router.index页面配置路由守卫结合Vuex完成我们的需求.

然后在路由配置中添加showFooter: true(因为要显示的多,不显示的少,所以,这里写显示,不想显示底部的页面只需要不写这句即可).

5.接下来到App.vue页面里修改底部footer标签

添加v-if="$store.state.showFooter"

现在没用过vue框架,都不好意思说自己是干前端呢,当然这句话并不是说干前端非得会vue,只是想说明他的火爆程度,现在连小程序都推出了mpvue,你确定你还不赶紧了解了解vue吗,我这篇文章的内容都是些很基础的vue知识,后续会补上

解析 : 

-  beforecreate :可以在这加个loading事件 

- created  :在这结束loading,还做一些初始化,实现函数自执行 

- mounted  : 在这发起后端请求,拿回数据,配合路由钩子做一些事情 

- * beforeDestory * : 你确认删除XX吗? destoryed :当前组件已被删除,清空相关内容

其中key为对象里面的键,value为对象里面的值,其本意就是动态改变原来已经固定的值值,就需要使用vue.set(‘想要改变的对象’,’要渲染的键‘,’要渲染的值‘)

解析  

遍历后{{parent.name}}的已经固定了,这时候点击编辑按钮,改变里面的值,虽然后台数据已经发生了改变,但那时页面渲染的效果并不会发生改变,这时候要想改变页面上的值,就需要使用vue.set(‘想要改变的对象’,’要渲染的键‘,’要渲染的值‘), 

在空的数组中不能使用push传入数据,所以应当使用vm.$set给数组添加

    ** 使用v-bind动态给元素绑定

这样可以在遍历的时候给不同的元素动态绑定不同id

在下次dom更新循结束之后延迟回调,在修改数据之后立即使用这个方法,获取更新后的dom

在vue中获取当前点击的元素对象,在点击的方法里 传 入$event,然后在methods方法里面接受传过来的值,具体如 下

这个指令保持在元素上直到关联实例结束编译 /,可隐藏为编译的标签直到实例准备完毕

computer也是一个对象,类似于methods,在里面也可以定义很多方法。计算属性的结果会被缓存,写法如下:

前一兄弟元素必须有v-if 或v-else-if

前一兄弟必须有v-if或v-else-if

vue包含一组观察数组的变异方法,所以它们也会出发视图更新

由于javascript的限制,Vue不能检测一下变动的数组

对于已经创建实例,vue不能动态添加根级别的响应式属性,但是可以使用Vue.set( object, key, value )方法嵌套对象添加响应式属性

props可以是数组或对象,用于接收来父组件的数据,或者使用对象作为替代

1.axios.post('url', {data} )

.axios发送跨域请求

  var headers ={

'headers':{

'Content-Type':' application/x-www-from-urlencoded'

  }

  }

axios.$http.post('url', {data},设置请求头)

axios发送post请求时传过去的数据格式不是formate格式。从而获取不到后台传过来的数据

解决办法:在页面中引入qs模块

import qs from'qs'

axios.interceptors.request.use((config)=>){

config.date=qs.stringify(config.data)

returnconfig

}

私有过滤器是将过滤器中的方法直接绑定到当前Vue实例上面,所以只能在当前托管区域中使用

全局过滤器相当于是将过滤器中的方法绑定到Vue构造函数的原型中,可以保证每一个Vue实例的托管区域都可以使用

vm在很多时候,页面还未加载出来,不能使用vm,这时我们有两种解决方法 

访问在线试听

如果项目数据过多的话,直接管理是非常不方便的,这时候就应该采用vuex,Vuex是一个专门为Vue.js应用程序开发的状态管理模式,它采用集中式存储管理应用所有的组件的状态

mui中的区域滚动组件,有个默认阻止冒泡事件,这时候在vue中使用click事件就会无法触发,具体做法是把click事件改为tap事件,只有区域滚动事件click事件才无法生效

vue中的get传参

axios.get(url,{params:{'aa':hello,'bb':'baibai'}})

我把图片的id都放入数组,让然后传给你,你再传给我过滤后的图片信息,然后你让我通过自己创建的数组里面的id来对你传过来的图片信息进行处理,可是我自己创建的数组会随着不同按钮而发生改变,

const arr1=[12,23,45,12,45]

const arr2=[12:'你好',23:'是吗',45:'算了']

for(let i arr1){

vm.$set(arr2,i,arr2[arr2[i]])

}     

这样得到的arr2 =[12:'你好',23:'是吗',45:'算了',12:'你好',45:'算了']

var a=[1,2,3,4,5,6,]

var b=a.filter((value,index)=>{

value:当前数组对应的值

index:当前值对应的索引

returnindex!=2

})

在vue中

import Vue from ‘vue’ //es6写法 

import App from ‘./App’

父子组件的通信:emit 

非父子组件之间的通信:event bus 

复杂情况:vuex


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11566171.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存