浅谈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 相关文章推荐
JQuery获取浏览器窗口内容部分高度的代码
Feb 24 Javascript
提示$ is not defined错误分析及解决
Apr 09 Javascript
JS 实现导航栏悬停效果(续)
Sep 24 Javascript
浏览器缩放检测的js代码
Sep 28 Javascript
Javascript基础教程之break和continue语句
Jan 18 Javascript
JS创建对象几种不同方法详解
Mar 01 Javascript
JavaScript 身份证号有效验证详解及实例代码
Oct 20 Javascript
纯JS实现轮播图
Feb 22 Javascript
原生JavaScript实现的简单省市县三级联动功能示例
May 27 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
Dec 04 Javascript
React.js组件实现拖拽排序组件功能过程解析
Apr 27 Javascript
electron踩坑之dialog中的callback解决
Oct 06 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
用函数读出数据表内容放入二维数组
2006/10/09 PHP
Jquery 基础学习笔记之文档处理
2009/05/29 Javascript
基于jquery的跟随屏幕滚动代码
2012/07/24 Javascript
JS上传图片前的限制包括(jpg jpg gif及大小高宽)等
2012/12/19 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
CSS中position属性之fixed实现div居中
2015/12/14 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
2018/12/06 NodeJs
javascript原型链学习记录之继承实现方式分析
2019/05/01 Javascript
es6中new.target的作用和使用场景简单示例分析
2020/03/14 Javascript
原生JS实现天气预报
2020/06/16 Javascript
原生js实现表格翻页和跳转
2020/09/29 Javascript
Vue如何实现变量表达式选择器
2021/02/18 Vue.js
[49:21]2018DOTA2亚洲邀请赛3月30日 小组赛B组 Effect VS iG
2018/03/31 DOTA
python实现html转ubb代码(html2ubb)
2014/07/03 Python
Python实现的堆排序算法原理与用法实例分析
2017/11/22 Python
利用Tkinter(python3.6)实现一个简单计算器
2017/12/21 Python
详解Django之auth模块(用户认证)
2018/04/17 Python
用Python下载一个网页保存为本地的HTML文件实例
2018/05/21 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
Python3简单实现串口通信的方法
2019/06/12 Python
突袭HTML5之Javascript API扩展3—本地存储全新体验
2013/01/31 HTML / CSS
捷克移动配件网上商店:ProMobily.cz
2019/03/15 全球购物
澳大利亚领先的内衣店:Bendon Lingerie澳大利亚
2020/05/15 全球购物
留学自荐信的技巧
2013/10/17 职场文书
高中军训感言200字
2014/02/23 职场文书
保险公司开门红口号
2014/06/21 职场文书
环境科学专业教师求职信
2014/07/12 职场文书
社区综治工作汇报
2014/10/27 职场文书
国际贸易实训报告
2014/11/05 职场文书
蓬莱阁导游词
2015/02/04 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书