Vue中通过自定义指令实现动态改变网页标题

场景需求

在使用Vue开发的单页面应用中想实现网页的title根据页面的不同或者点开文章的不同动态改变titile为我们自定义内容或者是文章的标题。

最终实现效果

首页
在这里插入图片描述
点击文章时
在这里插入图片描述
在这里插入图片描述
以上为三个页面的展示,其他页面同样可以根据自己的需要自定义不同的内容。

Vue自定义指令

在Vue中除了可以使用Vue自带的指令也可以自定义指令来实现对DOM的底层操作。详细使用文档请参考Vue官方文档

实现方法

这里演示的是以Vue-cli脚手架搭建的项目等使用过程。在main.js中添加如下代码:

//改变标题方法
function changeTitle(el,binding){
  const {value} = binding;
    if(el.dataset.title){
      document.title = el.dataset.title;
    }else if(value&&value.title){
      document.title = value.title;
    }
}
Vue.directive('blog-title',{
  inserted: function(el,binding){
    changeTitle(el,binding);
  },
  update: function(el,binding,vnode,oldNode){
    changeTitle(el,binding);
  }
})
  • inserted:被绑定元素插入父节点时调用
  • update:所在组件等VNode更新时调用,但是可能发生在其子VNode更新之前。指令的值可能发生了改变,也可能没有发生改变。我们可以通过比较更新前后的值来忽略不必要的模版更新。
    这里我在insertedupdate俩个函数中都执行了改变标题的操作,执行逻辑一致,所以把它抽成一个改变标题的方法。
使用自定义指令

上面我们定义了blog-title这个自定义标题,它对应的指令是v-blog-title,当然你可以定义的时候就定义成v-blog-title。根据我们方法中定义的使用方式有俩种方式:

  1. 使用data-title来定义网页标题。
  2. 使用v-blog-title="标题"这种给指令传值的方式。
    使用时在模版的第一个div下插入如下的代码
<div v-blog-title :data-title="title"></div>

这里的title就是博文的标题。其他页面同样只需要嵌入上面这一行代码,然后更改data-title的值或者改变v-blog-title的值就可以实现动态的改变标题了。
演示网址: https://www.huhailong.vip

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@胡海龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值