浅谈vue在html中出现{{}}的原因及解决方式


Posted in Javascript onNovember 16, 2020

原因:

浏览器渲染机制,解析html结构 -> 加载外部脚本和样式表文件 -> 解析并执行脚本代码 -> 构造html dom模型 -> 加载图片等外部文件 -> 页面加载完毕。

初始化vue的js写在页面底部,也就是最后才执行js脚本。

所以页面从头到尾开始渲染时,渲染到标签时,由于vue还未初始化,所以就会显示类似这样的代码

<h2>{{courseName}}</h2>

当网速很慢的时候就看得比较清楚,可能会让用户误以为bug之类的,快一点的话就是一闪而过,体验不是很好

解决办法:

1、网上说的很多都是用v-cloak,

<div id="app" v-cloak>
  {{context}}
</div>
[v-cloak]{
  display: none;
}

但是我用了下无效,可能哪里使用的不对?然后就干脆按自己的思路实现了

2、我现在实现解决的方式,给最外层div加个class='hide'(.hide{display: none},注意这个样式要写在head里),然后在vue初始化完成后,移除这个类hide,大概代码如下

<!DOCTYPE html>
<html lang="en">
 
<head>
 <meta charset="utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport"
  content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
 <title>标题</title>
 <style>
  .hide{
   display: none;
  }
 </style>
</head>
<body>
 <div id="app" class="hide">
  <h2>{{courseName}}</h2>
 </div>
 <script>
  //初始化vue
  initVue()
 
  function initVue() {
   new Vue({
    el: '#app',
    data: function () {
     return {
      datas:{
       courseName:''
      }
     }
    },
    mounted() {
     //移除隐藏样式
     document.querySelector('#app').classList.remove('hide')
    }
   })
  }
 </script>
</body>

补充知识:原生js和vue之间的数据通讯--EventEmitter

有个小项目在原来原生的框架编写,但是不想写原生,就引入了vue

然后有个需求要和原生的js进行交互通讯,于是就可以用node.js EventEmitter

具体做法:

先引入文件<script src="../../js/eventEmitter.js"></script>,

初始化,

然后在vue里面发送emit,

在外面监听on

var event = new EventEmitter();
$(document).ready(function () {
  //监听some_event事件
  event.on('some_event', function (data) {
    
  });
})
 
let vm = new Vue({
  el: "#app",
  methods: {
    getList() {
      // 触发事件
      event.emit('some_event','params');
    },
  }
});

附上eventEmitter.js

class EventEmitter {
 constructor() {
  this.event = {};
  this.maxListerners = 10;
 }
 // 监听
 on(type, listener) {
  if (this.event[type]) {
   if (this.event[type].length >= this.maxListerners) {
    console.error('同一个监听器最多被十个对象监听,否则可能造成内存泄漏.\n');
    return;
   }
      if (!this.event[type].includes(listener)) {
        this.event[type].push(listener);
      }
  } else {
   this.event[type] = [listener];
  }
 }
 //发送监听
 emit(type, ...rest) {
  if (this.event[type]) {
   this.event[type].map(fn => fn.apply(this, rest));
  }
 }
 //移除监听器
 removeListener(type,func) {
  if (this.event[type]) {
      this.event[type] = this.event[type].filter(item => item !== func);
      if (this.event[type].length === 0) {
        delete this.event[type];
      }
  }
 }
 //移除所有的监听器
 removeAllListener() {
  this.event = {};
 }
}

以上这篇浅谈vue在html中出现{{}}的原因及解决方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript获取当前日期是星期几的方法
Apr 06 Javascript
javascript跑马灯抽奖实例讲解
Apr 17 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
Aug 02 Javascript
AngularJs Managing Service Dependencies详解
Sep 02 Javascript
input框中自动展示当前日期yyyy/mm/dd的实现方法
Jul 06 Javascript
基于vue1和vue2获取dom元素的方法
Mar 17 Javascript
jQuery基于闭包实现的显示与隐藏div功能示例
Jun 09 jQuery
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
Jun 14 Javascript
如何解决webpack-dev-server代理常切换问题
Jan 09 Javascript
详解Vue前端对axios的封装和使用
Apr 01 Javascript
Vue实现点击显示不同图片的效果
Aug 10 Javascript
浅谈 JavaScript 沙箱Sandbox
Nov 02 Javascript
vue组件中传值EventBus的使用及注意事项说明
Nov 16 #Javascript
小程序自定义弹框效果
Nov 16 #Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
Nov 16 #Javascript
基于Vue+Webpack拆分路由文件实现管理
Nov 16 #Javascript
小程序实现上下切换位置
Nov 16 #Javascript
小程序实现点击tab切换左右滑动
Nov 16 #Javascript
微信小程序实现滚动Tab选项卡
Nov 16 #Javascript
You might like
PHP新手上路(十四)
2006/10/09 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
2014/08/20 PHP
Yii2如何批量添加数据
2016/05/17 PHP
PHP递归的三种常用方式
2019/02/28 PHP
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
基于jQuery的前端数据通用验证库
2011/08/08 Javascript
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
2013/06/27 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
Jquery的each里用return true或false代替break或continue
2014/05/21 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
mac上node.js环境的安装测试
2017/07/03 Javascript
详解webpack4多入口、多页面项目构建案例
2018/05/25 Javascript
微信小程序 调用微信授权窗口相关问题解决
2019/07/25 Javascript
JS校验与最终登陆界面功能完整示例
2020/01/13 Javascript
JS可断点续传文件上传实现代码解析
2020/07/30 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
[41:37]DOTA2北京网鱼队选拔赛——冲击职业之路
2015/04/13 DOTA
[04:56]经典回顾:前Ehome 与 前LGD
2015/02/26 DOTA
Python标准库urllib2的一些使用细节总结
2015/03/16 Python
python中print的不换行即时输出的快速解决方法
2016/07/20 Python
python实现微信定时每天和女友发送消息
2019/04/29 Python
django将数组传递给前台模板的方法
2019/08/06 Python
基于python实现模拟数据结构模型
2020/06/12 Python
python属于哪种语言
2020/08/16 Python
Python unittest如何生成HTMLTestRunner模块
2020/09/08 Python
谈谈python垃圾回收机制
2020/09/27 Python
CSS3实现div从下往上滑入滑出效果示例
2020/04/28 HTML / CSS
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
医学生自我评价
2014/01/27 职场文书
后勤主管岗位职责
2014/03/01 职场文书
综治工作汇报材料
2014/10/27 职场文书
2015年领导干部廉洁自律工作总结
2015/05/26 职场文书
pycharm部署django项目到云服务器的详细流程
2021/06/29 Python