【问题标题】:How to access another view's $scope in angular?如何以角度访问另一个视图的 $scope?
【发布时间】:2015-12-17 22:05:41
【问题描述】:

我使用 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(); 的调用来访问另一个页面上的对象。

【问题讨论】:

  • 你说“另一个 HTML 文档”,然后是 “另一个页面”?您是指 Angular 应用程序中的单独网页还是单独的视图?
  • 是的,完全正确。 @sdgluck

标签: javascript angularjs youtube


【解决方案1】:

我假设“播放器对象”指的是范围变量 $scope.player,“另一个页面”是指另一个视图,具有不同的范围,呈现到同一个 html 文档中 em> 玩家的视图所在的位置。 如果我对这些假设是正确的,那么您基本上有两个选择,它们都是有效的 w.r.t. “角度方式”。

使用全局控制器

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

使用事件

每个角度范围都是$rootScope 的子对象。通过在需要触发播放器功能的控制器中使用$rootScope.$broadcast 和在播放器所连接的控制器中使用$scope.$listen,您可以从应用程序中的每个可能位置控制播放器。


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

  1. 事件是“单向道路”,如果您需要从玩家范围之外从玩家那里检索任何值(例如,它是当前播放位置),则需要以相反的方式实现相同的机制,而使用全局控制器就像编写 $scope.player 一样简单
  2. 事件支持开发分离的、可重用的组件。如果您要实现一个视频中心,除了 youtube 还支持 vimeo 和其他平台,您可以通过使用事件抽象出所有这些不同插件的控制,只需插入新的视频平台,而无需修改您的其他视图控制器.

我推荐 Addy Osmani 的书“Learning JavaScript Design Patterns”和scopes 上的角度指南

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 2017-06-15
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多