当前位置: 移动技术网 > IT编程>脚本编程>vue.js > 基于Vue的SPA动态修改页面title的方法(推荐)

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

2018年02月05日  | 移动技术网IT编程  | 我要评论

钟鹿纯凸点,笨笨绑匪绑回狼,永生幽暗手套图纸

最近基于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上找到一个好用的东西

通过 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效果。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网