如何以角度访问另一个视图的$ scope?

时间:2015-09-21 09:07:10

标签: javascript angularjs youtube

我使用AngularJS构建Web应用程序。现在我使用AngularJS YouTube的嵌入插件。确切地说:https://github.com/brandly/angular-youtube-embed

现在我通过以下事件监听器暂停我的视频:player.pauseVideo();。我把这个添加到一个按钮。

YouTube嵌入与调用上述功能位于同一页面上。 该对象的标记是:

<youtube-video video-id="video" id="youtube-video" player="player" style="height:450px; width: 100%"></youtube-video>

对象上的player属性是你应该用来获取对象和函数调用之间链接的属性。

但是现在我还想在另一个单独的视图html文档上访问播放器对象。该页面上的功能不会暂停view.html上的视频。

有没有人知道如何使用类似player.pauseVideo();之类的调用来访问其他网页上的对象。

1 个答案:

答案 0 :(得分:2)

我假设是&#34;玩家对象&#34;你正在引用范围变量$scope.player和#34;另一个页面&#34;你的意思是另一个视图,具有不同的范围,呈现在同一个html文档中,其中包含播放器的视图。 如果我对这些假设是正确的,那么你基本上有两个选项,它们都是有效的w.r.t. &#34;角度方式&#34;。

使用全局控制器

您可以在html文档中引入一个页面范围的控制器(让我们称之为MasterController)并在那里定义$scope.player。然后,您可以在嵌入MasterController的每个控制器中访问$scope.player。请注意,不得在嵌套控制器上为$scope.player分配值,因为这会阻止原型继承机制。

使用事件

角度中的每个范围都是$rootScope的子级。通过在控制器中使用$rootScope.$broadcast,您需要从播放器触发功能,并在玩家所连接的控制器中使用$scope.$listen,您可以从应用中的每个可能位置控制播放器。 / p>

要确定哪种方式更适合您的用例,请考虑以下属性:

  1. 事件是“单向道路”,如果您需要从玩家范围之外从玩家中检索任何值(例如,它的当前游戏位置),您需要反过来实现相同的机制,而使用全局控制器就像编写$scope.player
  2. 一样简单
  3. Events支持开发非耦合,可重复使用的组件。如果你要实现一个视频集线器,除了youtube还支持vimeo和其他平台,你可以通过使用事件抽象掉所有这些不同插件的控制,只需插入新的视频平台,而无需修改其他视图控制器
  4. 我推荐这本书&#34; Learning JavaScript Design Patterns&#34;由Addy Osmani和scopes

    上的角度指南