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)代码>使用应用或应用同步