我得到了新的实现要求,所以我必须根据条件呈现指令。
<div ng-app="myApp">
<body-dir>
<icon-dir>
</icon-dir>
<filter-dir>
</filter-dir>
<widget-dir ng-if="someCondition">
</widget-dir>
</body-dir>
</div>
从上面的指令结构,我想基础上,someCondition
财产渲染'widget-dir'
。
Todo,我从<filter-dir>
发射事件,并捕获widget-dir
不起作用的事件。
如果我删除ng - 如果它工作正常。
下面的事情我从各种渠道了解:
NG-如果在创建新的范围。 但是根据角doc,新创建的范围将从父项继承。
那么,它应该共享
body-dir
范围? 如果它是共享的,那么我们从<filter-dir>
发出的任何事件,都应该记入widget-dir
?
以上功能工作正常如果我删除ng-if
。 在这里,我不明白究竟发生了什么。
我知道$emit
事件的目的是为了赶上父母的事件。 早些时候,我在兄弟姐妹中从父范围分享事件(这是否是最佳实践?)。
更新:这里还有一件事我注意到,如果我把ng-if
放在指令子元素(不是指令)上,那么它的工作方式和预期一样。 在下面的代码中,我将ng-if
放在模板元素上。 在这里,我只是想了解角度范围如何与ng-if
一起工作。
angular.module('app').directive('widgetDir', function(){
return {
template: '<br><span ng-if="true">I\'m in "ng-if"</span>',
link: function(scope, element, attrs){
scope.$on('evt-filter', function(evt, data){
alert(data);
});
}
}
})
任何人都可以请清除此。
问题重现的here
@选项1:如果我把NG-显示它会工作,因为它不会从大教堂,其中n,如果这样做,并创建新的范围中删除。 –
DOM元素是存在的,我已经验证 –
选项2:如果我要广播的事件我不得不事件发出母公司和父母的孩子有播出。 –