Angularjs 多个命名视图+;销毁$scope

Angularjs 多个命名视图+;销毁$scope,angularjs,angular-ui-router,Angularjs,Angular Ui Router,如果我正在使用一个具有多个视图的状态,如何销毁该视图的一个作用域?我尝试了以下方法,但无效: <div ng-if='showFilters' ui-view="filters"></div> <div ui-view="tabledata"></div> <div ui-view="graph"></div> 即使$scope.showFilters设置为false,“filters”视图的作用域仍然存在。我想知道n

如果我正在使用一个具有多个视图的状态,如何销毁该视图的一个作用域?我尝试了以下方法,但无效:

<div ng-if='showFilters' ui-view="filters"></div>
<div ui-view="tabledata"></div>
<div ui-view="graph"></div>


即使$scope.showFilters设置为false,“filters”视图的作用域仍然存在。我想知道ng if是否只销毁了它的子范围,而不知道ui视图的范围。非常感谢您的帮助。

我建议您使用视图层次结构,这样您就可以轻松地破坏任何“子”视图的范围:

.state('parent', {
        controller: "parentController as parent",
        templateUrl: '../parent.html'
    })
.state('child1', {
        controller: "child1Controller",
        templateUrl: '../child1.html'
    })
.state('child2', {
        controller: "child2Controller",
        templateUrl: '../child2.html'
    })
请注意,除非您愿意,否则您不必使用“parent.child2”(嵌套状态)。关键是子作用域将继承父作用域,只要它们在父作用域的html框架内,例如:

<div ui-view="parent">
   <div ui-view="child1"></div>
   <div ui-view="child2"></div>
</div>


然后从子级,您可以简单地引用类似于
{{parent.filters.filter1}}
的内容,如果您需要销毁作用域,您可以使用
this.filters=undefined

从父级控制器执行此操作。您能提供一些更多信息/可能的提示吗?当你说范围仍然存在时,你是什么意思?在子状态中设置的值将保留在父状态中,除非被重写,无论是否销毁子状态父元素。还有-你用的是什么版本的Angular和Ui路由器?我现在就准备一个plunker。我并不是指在儿童状态下设定的价值观……我同意你的观点。我要说的是,将ng if设置为false似乎不会破坏ui视图的范围。我认为这是一个完全不同的范围,与ng if范围无关,因此我试图找出一种方法,将ng if设置为false将破坏其自身及其准子“过滤器”范围。Angular版本是1.2.27,Ui Router版本是0.2.15plunkr对于我试图演示的多个视图似乎有点困难…我想我的问题的根源是,如果要影响Ui视图创建的范围,如何获得ng。如果ng If为false,它仍然不会破坏与“filters”视图关联的作用域。我之所以知道这一点,是因为它仍在接收来自家长的$broadcast的$on消息。