我正在使用bootstrap弹出模式窗口,并尝试$ emit和event但由于某种原因主页未检测到该事件。这是一个非常简单的设置,但我无法弄清楚原因。从我在查看Batarang时可以看出,弹出窗口显示主应用范围的子范围,所以我认为它会起作用,但它不会。在这个简单的应用程序中按“确定”时在弹出窗口中,它应该在父范围中设置一个值。这是一个吸烟者:
http://plnkr.co/edit/F2W1LaWSsqinaFpiISAr?p=preview
//Here's code where $emit is called in the child (Factory):
var modalInstance = $modal.open({
templateUrl: 'popupMyWindow.html',
pScope: parentScope,
controller:
function($scope, $modalInstance){
$scope.ok = function () {
$scope.$emit('ModalSelect', 'hello world');
$modalInstance.close(null);
}
},
//Here's where $on is called in the main controller:
$scope.$on('ModalSelect', function (event, selected) {
console.log('ModalSelect called successfully');
$scope.selectedValue = selected;
});
谢谢!
答案 0 :(得分:5)
我不确定将$scope
传递给服务是个好主意。 $scope
与视图中的位置非常相关,因此您真的知道自己应该$emit
还是$broadcast
?此外,当您通过$scope
时,单元测试更加困难。相反,传递一个回调函数。
话虽如此,你在$emit
指令的范围内调用$modal
,这可能是一个孤立的范围(我不知道该指令是如何定义的)所以它永远不会到达父节点。
所以你可以这样做:
parentScope.$emit('ModalSelect', 'hello world');
或者,您可以使用$rootScope
:
$scope.$root.$broadcast('ModalSelect', 'hello world');