从子范围到父范围的Angularjs ng-show不刷新

时间:2015-05-04 17:47:12

标签: javascript angularjs scope angularjs-scope angularjs-ng-show

尽管有许多类似的问题,我还没有找到如何在子范围内隐藏父ng-show的DOM元素。

我有两个嵌套控制器。 在父级(附加)中,我使用youtube embed指令,即使在ng-view中更改了视图,也能够连续阅读视频。

<html ng-app="app" ng-controller="ParentCtrl">
  <body>
    <youtube-video id="player" ... ng-show="selectedVideo.showVideo"></youtube-video>
    <div ng-view></div>
  </body>
</html>

当我第一次到达ngRoute中定义的路线时,会调用父控制器方法,在两个控制器中我都可以决定使用

来显示或隐藏视频
$scope.selectedVideo.showVideo = true;

视频会按照我的意愿显示或隐藏。

但是,当我使用后退按钮时,不会调用父控制器方法,但我会调用

$scope.selectedVideo.showVideo = false;

但视频仍显示......

此时,当我完全刷新页面(并手动...)时,视频最终会被隐藏。

我不确定为什么会这样......

我基本上希望有一些显示视频的ngRoute视图,而其他视图则没有。 也就是说,我希望来自父控制器的ng-show从子控制器设置为true / false ...

我知道如何实现这一目标?

我尝试将$scope.$parent与上面的对象和原语一起使用,但这并没有改变一件事。

用于ng-show的实际值已更新,但ng-show不在ngView中但未刷新...

1 个答案:

答案 0 :(得分:2)

在父控制器中,您可以使用以下方式侦听所有路线更改:

$scope.$on('$routeChangeSuccess', function(current){ 
    console.log(current) 
});

然后使用当前路线的属性,您应该能够通过设置适当的范围变量来管理您的视频播放器