基于Vue的SPA动态修改页面title的方法

最近基于VUE做个SPA手机端web发现动态修改页面标题通过document.title=xxxx 来修改着实蛋疼,而且在IOS的微信端据说没效果。百度发现要针对IOS的微信做点额外的操作,即:创建一个隐藏的Iframe,然后随便加载一个图片文件,然后加载完成移除,这样就能修改页面title了。网上有几种方案:

1,App.Vue里面设置title属性,然后页面title去绑定,所有子组件修改标题就通过 this.$root.data.title=xxxxx;去修改

缺点:App.Vue默认的el只是body的一个DIV,这样干需要绑定整个html

2,通过自定义指令实现

Vue.directive(‘title‘, {
  inserted: function (el, binding) {
    document.title = el.innerText
    el.remove()
  }
})

调用方法:<div v-title>标题内容</div>
优点:这样自定义程度较大(暂且不讨论IOS微信端是否能修改成功)
缺点:无法满足某些JS方法中修改页面标题的需求,例如页面为一个websocket的页面,收到消息要动态显示页面标题这时候频繁去修改div绑定的text并不恰当

针对网上查到的上面两种方法,我进行了合并,利用vue的插件实现SPA的页面标题修改:

var plugin={};
plugin.install=function(Vue,options){
    Vue.prototype.$title=function(title){
        document.title=title;
        var iframe=document.createElement("iframe");
        iframe.style.display=‘none‘;
        iframe.setAttribute(‘src‘,‘/e.png‘);
        var loadedCallback=()=>{
            iframe.removeEventListener(‘load‘,loadedCallback);
            document.body.removeChild(iframe);
        };
        iframe.addEventListener(‘load‘,loadedCallback);
        document.body.appendChild(iframe);
    };
};
module.exports=plugin;

调用方法:this.$title(‘xxxxxx‘);当然你可以替换为一个绑定的变量,然后watch进行实时调整,
个人感觉这种方案较上面的两种方法灵活度更高,有其他方案的欢迎留言,谢谢!

原文地址:https://www.cnblogs.com/263613093/p/8168119.html

时间: 2024-11-07 20:46:25

基于Vue的SPA动态修改页面title的方法的相关文章

基于Vue的SPA如何优化页面加载速度

常见的几种SPA优化方式 减小入口文件体积 静态资源本地缓存 开启GZip压缩 使用SSR ..... 减小入口文件体积,常用的手段是路由懒加载,开启路由懒加载之后,待请求的页面会单独打包js文件,使得入口文件index.js变小,开启懒加载之后,js是这样请求加载的: 2. 静态文件本地缓存有两种方式 HTTP缓存,设置Cache-Control,Last-Modified,Etag等响应头,很多文章讲的比较详细,推荐:https://www.cnblogs.com/chinajava/p/5

微信小程序——动态修改页面数据及参数传递

动态修改页面数据 在小程序中我们经常要动态渲染数据,对于新手而言我们常常遇到修改的数据在控制台显示和页面显示不一致,因为我们用“=”修改数据的,这种是可以修改,但无法改变页面的状态的,还会造成数据不一致,代码如下: data: { array: [{ text: '数组' }] } onLoad:function(){ this.data.array[0].text=1; console.log(this.data.array[0].text); } 修改代码: onLoad:function(

记一次基于vue的spa多页签实践经验

前言 最近收到一个这样的需求,要求做一个基于 vue 和 element-ui 的通用后台框架页,具体要求如下: 要求通用性高,需要在后期四十多个子项目中使用,所以大部分地方都做成可配置的. 要求做成脚手架的形式.可以 npm 安装 要求实现多页签,并且可以通过浏览器 url 回显多页签.而且页签内要维护一个历史记录,可以后退 组件要求异步加载,减少首屏加载时间. 很明显,这就是一个 类 ERP 的应用. 做过 JSP 等后台的同学,对多页签应该都很熟悉吧. 那接下来我们就来谈谈实现. 通用性高

JS动态修改页面EasyUI datebox不生效、EasyUI动态添加Class、EasyUI动态渲染解析解决方案

这是个小菜在实际工作中遇到的问题,相信很多EasyUI新手很可能也遇到这样的问题,因此小菜觉得有必要拿出来分享一下. 这个问题要从EasyUI的datebox组件说起,小菜用这个组件的时候,发现用$("#id").val()这种形式,居然拿不到文本框的值! 经过度娘的帮助,发现可以用$("#id").datebox('getValue'),但是这是为什么捏? 经过一翻研究和探索,小菜发现,如果一个input加上class="easyui-datebox&q

基于VUE选择上传图片并在页面显示(图片可删除)

demo例子: 依赖文件 : http://files.cnblogs.com/files/zhengweijie/jquery.form.rar HTML文本内容: <template> <div id="accident"> <div class="wrapper"> <i class="icon-pic"></i>相关照片 <button type="button&

微信浏览器下动态修改 微信title

var $body = $('body'); document.title = 'title' // hack在微信等webview中无法修改document.title的情况 var $iframe = $('<iframe src="/favicon.ico"></iframe>').on('load', function() { setTimeout(function() { $iframe.off('load').remove() }, 0) }).ap

动态修改页面标题title

原生js: document.getElementsByTagName("title")[0].innerText = 'innerText我是原生js方法'; document.title = 'title我是原生js方法'; jquery: $('title').html('html我是jq方法'); $('title').text('text我是jq方法'); 原文地址:https://www.cnblogs.com/douyafei/p/11023691.html

Vue ---在for循环修改页面中某个值,页面没有及时刷新问题(使用this.$forceUpdate()解决)

最近使用vue开发时,在一个函数中使用for循环,改变了页面中的值,在函数中查看是修改成功的,但是页面中没有及时刷新. 解决方法: 运用this.$forceUpdate()强制刷新. export default { data() { return { dataList:[], }; }, methods: { getData() { var _this = this; var dataList = []; dataList = response.data.data; for(var i=0;

easyui 动态修改窗口title

http://blog.csdn.net/liu251890347/article/details/39292307?utm_source=tuicool 使用easyui作为前台框架极大的节省了项目资源,easyui官网文档中基本上囊括了所有的方法,但一些灵活性的方法文档中是找不到的,比如说动态替换窗口的属性,下边简单介绍些如何快速替换窗体的title属性. 1.直接替换panel属性 例如:$('#dr_auth').panel({title: "新title"}); 所有的窗体都