Angularjs数据绑定问题/ javascript很奇怪

时间:2015-08-13 23:11:43

标签: javascript angularjs

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

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

将控制器用作模型,this.$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.$on进行侦听来触发这两种方法,并且两种方法都应该按照它们的方式触发。但是,showVideo方法成功更新其关联的状态属性,而showControls方法则不会。我做错了什么?

使用调试工具看起来,如states.showControls被设置为true,但此更改未反映在视图中,并且向状态对象添加观察者不会此时检测到任何变化。我设置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); }

      });
    }
  });

0 个答案:

没有答案