vue.js路由中怎么用iframe

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue.js路由中怎么用iframe相关的知识,希望对你有一定的参考价值。

参考技术A <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>

<div id="app">
<h1>Hello App!</h1>
<p>
<!-- 使用指令 v-link 进行导航。 -->
<a v-link=" path: '/foo' ">Go to Foo</a>
<a v-link=" path: '/bar' ">Go to Bar</a>
</p>
<!-- 路由外链 -->
<router-view></router-view>
</div>

<script src="http://cdn.jsdelivr.net/vue/1.0.12/vue.min.js"></script>
<script src="http://cdn.bootcss.com/vue-router/0.7.13/vue-router.min.js"></script>

<script type="text/javascript">
'use strict';

Vue.use(VueRouter)

// 定义组件
var Foo = Vue.extend(
props: ['src'],
template: '<iframe :src="src"></iframe>',
route:
data: function (transition)
this.src = 'https://cn.bing.com/search?q=' + transition.to.path


)

// 路由器需要一个根组件。
// 出于演示的目的,这里使用一个空的组件,直接使用 HTML 作为应用的模板
var App = Vue.extend()

// 创建一个路由器实例
// 创建实例时可以传入配置参数进行定制,为保持简单,这里使用默认配置
var router = new VueRouter()

// 定义路由规则
// 每条路由规则应该映射到一个组件。这里的“组件”可以是一个使用 Vue.extend
// 创建的组件构造函数,也可以是一个组件选项对象。
// 稍后我们会讲解嵌套路由
router.map(
'/foo':
component: Foo
,
'/bar':
component: Foo

)

// 现在我们可以启动应用了!
// 路由器会创建一个 App 实例,并且挂载到选择符 #app 匹配的元素上。
router.start(App, '#app')

</script>
</body>
</html>

每次更新路由时调用一个函数 vue.js

【中文标题】每次更新路由时调用一个函数 vue.js【英文标题】:call a function every time a route is updated vue.js 【发布时间】:2018-01-18 01:09:40 【问题描述】:

我在我的应用程序中集成了对讲机,每次我的网址更改时我都需要致电window.Intercom('update');

我知道我可以将它添加到mounted(),但我宁愿不修改我的所有组件,而是直接使用navigation guards 来完成。 (主要是为了避免在 10 个不同的地方有相同的代码。

目前我有:

router.afterEach((to, from) => 
  eventHub.$off(); // I use this for an other things, here is not important
  console.log(window.location.href ) // this prints the previous url
  window.Intercom('update'); // which means that this also uses the previous url
)

这在更改 url 之前运行 intercom('update'),而我需要在 url 更改后运行它。

是否有一个钩子在 url 更改时运行? 我该怎么做?

谢谢

【问题讨论】:

您可以在 Vue 实例中尝试 watching the $route object。 @thanksd 我说它还没有改变,因为在第 3 行 console.log(window.location.href ) 打印了以前的 url。例如从家里我点击 /about,它打印 home,然后我点击 /team 它打印 /about 等 @Phil 你的意思是在我的基础组件中添加一个观察者?这可以工作.. 我通常会尽量避免观察者,但在这里它可能是有意义的 为什么不给 App.vue 添加一个挂载的钩子。所有其他组件都是 App.vue 的子组件 @KamgaSimoJunior @Phil watch 工作得很好。谢谢。 【参考方案1】:

不确定这是否会起作用,因为您已经拥有的似乎应该没问题,但是这里...

尝试watching the $route object 进行更改

new Vue(
  // ...
  watch: 
    '$route': function(to, from) 
      Intercom('update')
    
  
)

【讨论】:

参数的顺序应该to, from,否则正是我要找的。​​span> @Jonas 他们只是名字,但你是对的,论点应该颠倒过来。将修复 对我来说,观看`'$route'` 没有检测到变化,但$route 检测到了。我的意思是我必须删除引号。 @YeasirArafatMajumder 根本不应该有任何区别【参考方案2】:

我刚刚想出了除菲尔之外的另一个解决方案,您也可以使用Global Mixin。它将其方法或生命周期挂钩合并到每个组件中。

Vue.mixin(
  mounted() 
    // do what you need
  
)

【讨论】:

我建议不要使用此解决方案。如果您使用每个路由一个组件的简单实现,这可能会起作用,但是使用此方法,mounted() 事件将附加到每个组件,因此如果您在路由中有一个或多个子组件,该事件将运行一次他们每个人。这可能会导致您的应用程序出现意外和无法控制的行为。

以上是关于vue.js路由中怎么用iframe的主要内容,如果未能解决你的问题,请参考以下文章

(vue.js)Vue element tab 每个tab用一个路由来管理?

vue.js 在 App.vue 中获取路由名称

vue.js路由vue-router——简单路由基础

每次更新路由时调用一个函数 vue.js

[JavaScript从入门到放弃系列] 高级篇10.是时候用Vue.js来写前端了(路由1)

vue 开发系列 路由配置