基于Vue的SPA动态修改页面title的方法(推荐)


Posted in Javascript onJanuary 02, 2018

最近基于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进行实时调整。

ps:Vue Spa切换页面时更改标题

在Vue组件化开发过程中,因为是单页面开发,但是有时候需要页面的title根据情况改变,于是上网查了一下,各种说法花(wo)里(kan)胡(bu)哨(dong), 于是想到一个黑科技 documet.title="xxx";

随便创建一个项目,在独立的模块中,created在钩子函数启动之后document.title='标题'; 但是据说在IOS的微信下是无效的,虽然用苹果机测试过有用,但是想到这样会影响我的代码洁癖。

<script>
export default {
  data(){
    return{
    }
  },
  created(){
    document.title="首页"
  },
}
</script>

于是在github上找到一个好用的东西 vue-wechat-title

通过 npm install vue-wechat-title  安装

引入需要的vue-router与页面需要的组件之后

const router = new VueRouter({
  mode: 'history',
  routes:[
    {
    name: 'index',
    path: '/',
    meta: {
        title: '首页'
     },
     component: index
    },
   {
     name: 'root',
     path: '/root', 
     meta: {
        title: '肉特'
    },
    component: root
    }  
 ]
});
Vue.use(require('vue-wechat-title')); //实例化参数

在组件中顶部添加一段 <div v-wechat-title="$route.meta.title"></div>

即可实现改变title效果。

Javascript 相关文章推荐
HTML TO JavaScript 转换
Jun 26 Javascript
js 获取中文拼音,Select自动匹配字母获取值的代码
Sep 23 Javascript
js常用自定义公共函数汇总
Jan 15 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
Aug 25 Javascript
Jquery 1.9.1源码分析系列(十二)之筛选操作
Dec 02 Javascript
使用do...while的方法输入一个月中所有的周日(实例代码)
Jul 22 Javascript
js智能获取浏览器版本UA信息的方法
Aug 08 Javascript
js在ie下打开对话窗口的方法小结
Oct 24 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
Jun 09 Javascript
JavaScript实现音乐自动切换和轮播
Nov 05 Javascript
详谈DOM简介及节点、属性、查找节点的方法
Nov 16 Javascript
vue2.0获取鼠标位置的方法
Sep 13 Javascript
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
Jan 02 #Javascript
使用async、enterproxy控制并发数量的方法详解
Jan 02 #Javascript
图片懒加载imgLazyLoading.js使用详解
Sep 15 #Javascript
基于jquery.page.js实现分页效果
Jan 01 #jQuery
jquery实现企业定位式导航效果
Jan 01 #jQuery
jquery实现楼层滚动效果
Jan 01 #jQuery
jquery实现左右轮播切换效果
Jan 01 #jQuery
You might like
PHP多线程抓取网页实现代码
2010/07/22 PHP
屏蔽机器人从你的网站搜取email地址的php代码
2012/11/14 PHP
PHP Class&amp;Object -- PHP 自排序二叉树的深入解析
2013/06/25 PHP
destoon实现VIP排名一直在前面排序的方法
2014/08/21 PHP
常见PHP数据库解决方案分析介绍
2015/09/24 PHP
jquery tools之tooltip
2009/07/25 Javascript
Chrome中JSON.parse的特殊实现
2011/01/12 Javascript
Javascript引用指针使用介绍
2012/11/07 Javascript
JS图片无缝、平滑滚动代码
2014/03/11 Javascript
jquery 显示*天*时*分*秒实现时间计时器
2014/05/07 Javascript
js中this用法实例详解
2015/05/05 Javascript
jQuery 操作input中radio的技巧
2016/07/18 Javascript
JS简单生成两个数字之间随机数的方法
2016/08/03 Javascript
纯js三维数组实现三级联动效果
2017/02/07 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
浅谈Webpack 持久化缓存实践
2018/03/22 Javascript
再谈Angular4 脏值检测(性能优化)
2018/04/23 Javascript
详解搭建es6+devServer简单开发环境
2018/09/25 Javascript
vue组件中的样式属性scoped实例详解
2018/10/30 Javascript
深入理解vue-class-component源码阅读
2019/02/18 Javascript
Javascript幻灯片播放功能实现过程解析
2020/05/07 Javascript
Vue Router中应用中间件的方法
2020/08/06 Javascript
python获取Linux下文件版本信息、公司名和产品名的方法
2014/10/05 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
解决Python print 输出文本显示 gbk 编码错误问题
2018/07/13 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
python字符串中匹配数字的正则表达式
2019/07/03 Python
python向图片里添加文字
2019/11/26 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
澳大利亚宠物商店:Petbarn
2017/11/18 全球购物
英国伦敦的睡衣品牌:Asceno
2019/10/06 全球购物
2015年高三班主任工作总结
2015/05/21 职场文书
2015年党建工作汇报材料
2015/06/25 职场文书
装修安全责任协议书
2016/03/22 职场文书
会议承办单位欢迎词
2019/07/09 职场文书