Angularjs数据绑定问题/javascript异常

Angularjs数据绑定问题/javascript异常,javascript,angularjs,Javascript,Angularjs,这无疑是一个愚蠢的问题,我只是做了一些简单的错误 我有一个包含多个指令的页面,加载它们的模板和控制器。除了这个,所有的都很好用 使用控制器作为模型,此。与$scope.相同。因此,在我的控制器中,我有: var self = this; this.states = { showControls: false, showVideo: false } this.showVideo = function() { self.states.showVideo = true; } this.showCon

这无疑是一个愚蠢的问题,我只是做了一些简单的错误

我有一个包含多个指令的页面,加载它们的模板和控制器。除了这个,所有的都很好用

使用控制器作为模型,
此。
$scope.
相同。因此,在我的控制器中,我有:

var self = this;
this.states = { showControls: false, showVideo: false }

this.showVideo = function() { self.states.showVideo = true; }
this.showControls = function() { self.states.showControls = true; }

$scope.$on(Constants.EVENT.START_WEBCAM, self.showVideo)
$scope.$on(Constants.EVENT.VIDEO_SUCCESS, self.showControls)
在视图中,我有一个按钮显示视图的这一部分,并随后请求访问您的网络摄像头。单击按钮从父控制器广播带有
$rootScope.$broadcast
的事件

当用户授权访问网络摄像头(在指令的链接功能中处理)时,它会以相同的方式广播另一个事件

这两种方法都是通过在上使用
$scope.$进行监听来触发的,并且这两种方法都会按其应该的方式启动。但是,showVideo方法成功更新了其关联的状态属性,而showControls方法没有。我做错了什么

使用调试工具,它看起来像是
状态。showControls
被设置为true,但此更改不会反映在视图中,并且向states对象添加观察者也不会在此时检测到任何更改。当我设置
showVideo
时会显示

编辑 本部分在指令中:

  if (Modernizr && Modernizr.prefixed('getUserMedia', navigator)) {
    userMedia = Modernizr.prefixed('getUserMedia', navigator);
  }

  var videoSuccess = function(stream) { 
  // Do some stuff
  $rootScope.$broadcast(Constants.EVENT.VIDEO_SUCCESS);

  }

  scope.$on(Constants.EVENT.START_WEBCAM, function() {
    if (MediaStreamTrack && MediaStreamTrack.getSources) {

      MediaStreamTrack.getSources(function(sourceInfo) {
        var audio = null;
        var video = null;

        _.each(sourceInfo, function(info, i) {
          if (info.kind === "audio") {
            audio = info.id;
          } else if (info.kind === "video") {
            video = info.id;
          } else {
            console.log("random unknown source: ", info);
          }
        });

        if (userMedia) { userMedia(getReqs(), videoSuccess, error); }

      });
    }
  });

您没有显示触发事件的更相关部分。$rootScope.$broadcast(Constants.event.START\u网络摄像头)$rootScope.$broadcast(常量.事件.视频\u成功);当然,这是显而易见的,但当它发生时,您需要显示更多的代码,尤其是当用户授予访问网络摄像头的权限时?怎么用?如果是在angular上下文之外发生的操作,则需要手动应用摘要循环。抱歉,我从指令中添加了触发它的相关部分。您需要在
$rootScope.$apply()
之后立即调用
$rootScope.$broadcast(Constants.EVENT.VIDEO\u SUCCESS)使用apply或applyasyncy您没有显示触发事件的更相关部分。$rootScope.$broadcast(Constants.event.START\u网络摄像头)$rootScope.$broadcast(常量.事件.视频\u成功);当然,这是显而易见的,但当它发生时,您需要显示更多的代码,尤其是当用户授予访问网络摄像头的权限时?怎么用?如果是在angular上下文之外发生的操作,则需要手动应用摘要循环。抱歉,我从指令中添加了触发它的相关部分。您需要在
$rootScope.$apply()
之后立即调用
$rootScope.$broadcast(Constants.EVENT.VIDEO\u SUCCESS)使用应用或应用同步