$scope.$on无法更新指令作用域

4

嘿,我在使用指令时遇到了一些问题。我无法使用scope.$on更新指令内部的作用域。以下是我的代码示例。

function linkdir1(scope){
        element.bind('click',function(){
            scope.$emit('someEvent',scope.data,scope.data2); //emit to parent directive
        });
}

function parentDir($scope){
         $scope.$on('someEvent',function(e,data,data2){
           $scope.$broadcast('broadcastEvent',data+data2);
        });
  }

function linkdir2(scope){

          scope.$on('broadcastEvent',function(e,data){ // i can see this data but can't update scope then.
            data == 0 ? scope.show = false : scope.show = true;
        });  
  }
<div parent-dir>
  <div dir-one></div>
  <div dir-two></div>
</div>

我尝试使用scope.$watch但这并不起作用。感谢帮忙。


在事件处理程序的末尾尝试使用scope.$apply();。 - sdfacre
尝试更改OneCtrl中的$scope.data变量,以查看它是否正常工作:https://jsbin.com/tuyukavufo/edit?html,js,output - Zoltan Toth
1
请问您能否粘贴您的指令代码? - maddygoround
感谢 @sdfacre。已关闭 :) - Jan Kowalski
1个回答

1
欢迎。我想我只需将其作为答案发布,这样其他人就可以轻松找到它。如果它解决了你的问题,那么如果你能接受它,那就太好了。 :)
添加
scope.$apply(); 

在事件处理程序的结尾。

我有一个问题。我使用了两次scope.$apply,下一次使用时会提示$digest相关问题,我使用了$evalAsync修复它并且现在可以正常工作,但这是唯一的解决方案吗? - Jan Kowalski
为什么需要两个scope.$apply?你能给我展示一下代码吗? - sdfacre
我需要用它来更新其他指令。我在两个指令中只使用了 $apply,并且遇到了这个 $digest 问题。 - Jan Kowalski
1
这是一个与编程有关的内容,请把以下句子翻译成中文并只返回翻译后的文本内容:这里是plunk http://plnkr.co/edit/mvYBQHPq99XF6vCUCt0o?p=preview,其中没有你所描述的错误。请随意更改和保存它,这样我就可以看一下了。 - sdfacre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接