浅谈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 相关文章推荐
Prototype源码浅析 String部分(四)之补充
Jan 16 Javascript
封装获取dom元素的简单实例
Jul 08 Javascript
自制微信公众号一键排版工具
Sep 22 Javascript
Java  Spring 事务回滚详解
Oct 17 Javascript
基于Vuejs框架实现翻页组件
Jun 29 Javascript
AngularJS中控制器函数的定义与使用方法示例
Oct 10 Javascript
JS中移除非数字最多保留一位小数
May 09 Javascript
详解从Vue-router到html5的pushState
Jul 21 Javascript
js实现下拉框二级联动
Dec 04 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
Dec 14 Javascript
javascript将扁平的数据转为树形结构的高效率算法
Feb 27 Javascript
vue内置组件component--通过is属性动态渲染组件操作
Jul 28 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与SQL注入攻击[二]
2007/04/17 PHP
PHP性能优化工具篇Benchmark类调试执行时间
2011/12/06 PHP
php写入、删除与复制文件的方法
2015/06/20 PHP
PHP关联数组实现根据元素值删除元素的方法
2015/06/26 PHP
详解php中反射的应用
2016/03/15 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
jQuery Tools tab(幻灯片)
2012/07/14 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
js实现键盘控制DIV移动的方法
2015/01/10 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
2015/11/03 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
2015/12/11 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
简单谈谈gulp-changed插件
2017/02/21 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
Javascript实现时间倒计时功能
2018/11/17 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
JavaScript的变量声明与声明提前用法实例分析
2019/11/26 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
Python3实现连接SQLite数据库的方法
2014/08/23 Python
python迭代器实例简析
2014/09/25 Python
python正则表达式match和search用法实例
2015/03/26 Python
详解Python的Twisted框架中reactor事件管理器的用法
2016/05/25 Python
Python中低维数组填充高维数组的实现
2019/12/02 Python
在Python IDLE 下调用anaconda中的库教程
2020/03/09 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
详解python metaclass(元类)
2020/08/13 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
JBL美国官方商店:扬声器、耳机等
2019/12/01 全球购物
审核会计岗位职责
2013/11/08 职场文书
妇联主席先进事迹
2014/05/18 职场文书
中学生检讨书范文
2014/11/03 职场文书
退休欢送会致辞
2015/07/31 职场文书
2016年小学优秀班主任事迹材料
2016/02/29 职场文书