vue项目常见问题

vue项目常见问题

1. 如何输出HTML?

vue 语法中的“Mustache”语法 (双大括号) 只会将数据解释为普通文本,如想要输出真正的HTML,需使用 v-html 指令:

<div v-html="rawHtml"></div>  

2. 如何绑定class值?

<div class="item" :class="{'off': !item.is_read}"></div> // 注意:class值需加引号 

3.如何引入一个组件?

(1)通过 import 引入

import Loading from 'components/loading 

(2)在 components 中注册

components: {  
  'v-loading': Loading,
}  

(3)通过注册的标签在 template 中使用

<v-loading></v-loading>  

4.如何设置全局变量?

如果多个组件都会用到同一变量,则可以把该变量设为全局变量,在组件中直接引用即可,例如:

// 在mian.js中设置全局图片基本url
Vue.prototype.resourceUrl = 'http://resource.breadoffer.com'
// 在组件中使用:
![](resourceUrl + obj.cover)

5.如何设置全局函数?

//在main.js中设置全局函数:
Vue.prototype.GetQueryString = function (name){ // 此函数为通过url截取所需字符串函数
    var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);
    if(r!=null)return  unescape(r[2]); return null;
}
// 在组件中使用函数
mounted(){
  this.id = this.GetQueryString('id'); // 需使用this
} 

6.SPA应用如何切换路由时改变title?

如需切换路由时改变对应列表页title,首先需安装插件 vue-wechat-title:

npm install vue-wechat-title

在main.js中引入插件:

Vue.use(require('vue-wechat-title'));  

在路由 router 下的 index.js 中配置:

/**搜索页面**/
  {
     path: '/search',
     name: 'Search',
     component: resolve => require(['@/components/search'], resolve),
     meta: {
        title: '面包求职-做个学院,一起烘焙面包。精选干货,内部推荐,行业招聘,行业动态,面包新闻。'
      },
    },  

在组件中使用:

<div class="mainContent clear" v-wechat-title="$route.meta.title" :class="{'active':status}">
  <router-view></router-view>
</div>  

7.如何改变详情页title?

// 在main.js中设置全局函数
 Vue.prototype.setTitle = function (title) {
   var u = navigator.userAgent
   var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1
   var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)
   if (isAndroid) {
    document.title = title
   } else if (isiOS) {
    var $body = $('body')
    document.title = title
    var $iframe = $('<iframe src="/static/img/xyxlogo.png"></iframe>')
    $iframe.on('load', function () {
     window.setTimeout(function () {
      $iframe.off('load').remove()
     }, 0)
    }).appendTo($body)
  }
} 

// 在组件中调用: 
this.setTitle(item.title)

8.父组件如何将值传递到子组件?

组件实例的作用域是孤立的。在子组件的模板内不能直接引用父组件的数据,所以父组件的数据需要通过 prop 才能下发到子组件中。

(1)首先在父组件中传值:

<child message="hello!"></child>

(2)然后在子组件中接收(像data一样,prop可以在模板中直接使用):

 export default{
  props:['message'], // 声明预期的数据
}   

注:如果想要传递动态的值,则需要使用v-bind来动态地将 prop 绑定到父组件(传递数值也需使用v-bind)

// 父组件:   
<child :message="msg"></child>  

export default{
  data(){
    return{
        msg:'hello',
    }
 }
}  

9.如何修改父组件传递到子组件的值?

prop 作为初始值传入后,子组件想把它当作局部数据来用

(1) 首先在子组件的data中创建 传递值likeNum 的副本

export default{
  props:['likedNum'], // 声明预期的数据
  data(){
    return{
      mylikeNum:this.likedNum, // 在data中创建likedNum的副本,实现改变数据
    }
  },
} 

(2) 之后在监听函数中实现数据双向绑定

watch:{
    likedNum(val){
      this.mylikeNum = val; // 监听外部对 props 属性 likedNum 的变更,并同步到组件内的 data 属性 mylikeNum 中
    }
  }, 

(3) 在方法中对 传递值likeNum 进行操作

 methods:{
    thumb(){
        var self = this; 
        self.mylikeNum ++;
    }
 }  

10.mounted方法注意事项:

mounted执行时机:el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用,但是mounted在执行时并不会将所有子组件也都一起被挂载,如果想要整个视图都渲染完毕,可以用 vm.$nextTick:

mounted: function () {
  this.$nextTick(function () {
     do something...
  })
}

11.如何使用路由懒加载?

/**首页**/
{
  path: '/index',
  name: 'Index',
  component: resolve => require(['@/components/index'], resolve), // 运行时按需加载
}, 

注:组件异步加载也可用此方法

12.如何去掉url中的 # 号?

vue-router 默认 hash 模式 ,如果项目中使用了路由,则直接使用路由的history模式即可:

注: 在history模式下,需后台配置支持,前端应该在 Vue 应用里面覆盖所有的路由情况,然后在给出一个 404 页面。

具体详情请参考: https://router.vuejs.org/zh-cn/essentials/history-mode.html

{
  mode: 'history',
  routes: [
    /**404页面**/
    {
      path: '*',
      name:'Error',
      redirect: '/error/404',
    },
  ]  

13.如何解决webpack打包后页面空白无法显示?

找到 config 文件夹下的 index.js,修改里面的 assetsPublicPath 路径,将 ‘ / ’ 改为 ‘ . / ’,

module.exports = {
  //打包时使用的配置
  build: {
    env: require('./prod.env'), // // webpack的编译环境
    index: path.resolve(__dirname, '../dist/index.html'), //编译输入的index.html文件
    assetsRoot: path.resolve(__dirname, '../dist'), // webpack输出的目标文件夹路径
    assetsSubDirectory: 'static', // webpack编译输出的二级文件夹
    assetsPublicPath: './', // webpack编译输出的发布路径
    productionSourceMap: true,
    productionGzip: false,
    productionGzipExtensions: ['js', 'css'],
    bundleAnalyzerReport: process.env.npm_config_report
  },
}

14.如何处理webpack不能编译多行省略属性问题?

在多行省略的css样式中添加如下代码:

/* autoprefixer: off*/
  -webkit-box-orient: vertical;
/* autoprefixer: on*/ 

15.如何处理插件moment.js在火狐及移动端不兼容问题?

moment.js如果想把日期格式渲染为(月,日,年)英文格式,代码需要修改为:

Vue.filter('Moment' , function(date) {
  return moment(date,'YYYYMMDD').format('MMMM Do, YYYY') // 需在data后添加‘YYYYMMDD’,转化后日期格式为:April 13th, 2017
}); 

16.如何解决 iview 中 Icon 图标组件打包后丢失问题?

在 build / webpack.prod.conf.js 中,将里边的 extract 改为 false,默认为 true

module: {
    rules: utils.styleLoaders({
      sourceMap: config.build.productionSourceMap,
      extract: false
    })
 }, 

17.关于v-for 遍历数组时的参数顺序问题

当包含index时,之前1.0版本遍历数组时的参数顺序是(index,value), 但现在是(value,index)

<li v-for="(value,index) in listArr"></li>  

18.$index 在2.0中已经移除

在1.0中,例如在点击事件中想要获取元素下标,可通过变量 $index 获取,但是在2.0中已经移除

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

推荐阅读更多精彩内容

  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,197评论 0 6
  • 绝望就是像死一样活着吧,没有感情没有意志力没有理性。 为什么绝望?理由懒得说,因为太长太乱,从零岁到二十四岁的错综...
    种子的操控阅读 134评论 0 0
  • )改变输入/输出数量。 “Parameters(参数)”选项卡显示了传递函数矩阵的细节。 原文:The order...
    橡果阅读 379评论 0 0
  • 今天我和一群小伙伴们早早的来到了高铁站,想知道我们来这里干什么。哈哈,因为我们要去盼望已久“七彩梦”拓展基...
    张衍楷阅读 349评论 1 1
  • 几乎是转眼的时间,三个阶段的学习就已经进入了倒计时阶段。相信同学们都会谈很多财商方面的感悟,我就来说说对我另一方面...
    Anran_488b阅读 93评论 1 2