浅谈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 相关文章推荐
Js event事件在IE、FF兼容性问题
Jan 01 Javascript
基于jQuery的投票系统显示结果插件
Aug 12 Javascript
理解JSON:3分钟课程
Oct 28 Javascript
通过length属性判断jquery对象是否存在
Oct 18 Javascript
JS实现生成会变大变小的圆环实例
Aug 05 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
Jun 17 Javascript
纯JS实现只能输入数字的简单代码
Jun 21 Javascript
react-native-video实现视频全屏播放的方法
Mar 19 Javascript
小程序实现左滑删除功能
Oct 30 Javascript
JS前端知识点总结之内置对象,日期对象和定时器相关操作
Jul 05 Javascript
jQuery实现轮播图源码
Oct 23 jQuery
vue 中url 链接左边的小图标更改问题
Dec 30 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将csv文件导入到mysql数据库的方法
2014/12/24 PHP
PHP安装threads多线程扩展基础教程
2015/11/17 PHP
thinkPHP框架RBAC实现原理分析
2019/02/01 PHP
use jscript with List Proxy Server Information
2007/06/11 Javascript
浅谈Javascript嵌套函数及闭包
2010/11/09 Javascript
javascript中的delete使用详解
2013/04/11 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
Node.js 日志处理模块log4js
2016/08/28 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
2016/09/04 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
React Router基础使用
2017/01/17 Javascript
vue.js动态数据绑定学习笔记
2017/05/19 Javascript
详解webpack+vue-cli项目打包技巧
2017/06/17 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
nodejs 如何手动实现服务器
2018/08/20 NodeJs
ionic4+angular7+cordova上传图片功能的实例代码
2019/06/19 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
[58:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第一场 1月31日
2021/03/11 DOTA
Python实现计算两个时间之间相差天数的方法
2017/05/10 Python
python+opencv识别图片中的圆形
2020/03/25 Python
对tf.reduce_sum tensorflow维度上的操作详解
2018/07/26 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
简单了解Python生成器是什么
2019/07/02 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
pycharm 激活码及使用方式的详细教程
2020/05/12 Python
python使用建议与技巧分享(二)
2020/08/17 Python
Html5踩坑记之mandMobile使用小记
2020/04/02 HTML / CSS
高中毕业生自我鉴定
2013/11/03 职场文书
应用外语系自荐信
2014/06/26 职场文书
“向国旗敬礼”主题班会活动设计方案
2014/09/27 职场文书
在python中读取和写入CSV文件详情
2022/06/28 Python
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers