Javascript 在更改ui路由器中的路径之前销毁作用域
我使用Javascript 在更改ui路由器中的路径之前销毁作用域,javascript,angularjs,angularjs-scope,angular-ui-router,Javascript,Angularjs,Angularjs Scope,Angular Ui Router,我使用UI路由器路由。当我将路径从一个状态更改为另一个状态并返回到相同的状态时,我看到状态中的旧$scope就在那里(带有它的属性) 我想在状态更改之前销毁$scope,所以当我第二次回到状态时,将有一个全新的作用域。我尝试访问此事件中的作用域: $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) { // fromState.$scope.$
UI路由器
路由。当我将路径从一个状态更改为另一个状态并返回到相同的状态时,我看到状态中的旧$scope就在那里(带有它的属性)
我想在状态更改之前销毁$scope,所以当我第二次回到状态时,将有一个全新的作用域。我尝试访问此事件中的作用域:
$rootScope.$on('$stateChangeStart',
function(event, toState, toParams, fromState, fromParams) {
// fromState.$scope.$destroy();
});
但是没有任何对$scope的引用。我可以在angular
UI Router
中更改状态之前访问scope吗?我想说的是,您的体验与您描述的有点不同,或者您认为发生了什么。请检查以下示例:
$scope
。但这个$scope是这样创建的:
的源代码
构造:作用域。$new()代码>
是理解的关键。这实际上意味着,我们使用原型继承
$scope
,它已从其父级克隆了所有属性
因此,如果父级包含如下引用(路径中有“.”
// parent scope
$scope.Model = {
...
};
$scope.Model.name = "User";
任何子州都会这样改变
// parent scope
$scope.Model = {
...
};
$scope.Model.name = "User";
该值将存储在父项中,并再次可用。。。为了这个州的下一个孩子
注意:如果我们离开状态,
,则可以使用相同的方法来证明这一事实:
function cleanupLastView() {
if (previousEl) {
previousEl.remove();
previousEl = null;
}
if (currentScope) {
currentScope.$destroy();
currentScope = null;
}
...
延伸
我用这两种状态创建了:
.controller('ParentCtrl', ['$scope', function ($scope) {
$scope.Model = {
SharedName: "This is shared name",
}
$scope.NotSharedName = $scope.NotSharedName
|| "This name is cloned, but then lives its own way";
}])
.controller('ChildCtrl', ['$scope', function ($scope) {}])
这两种方法如何更改值(都将遵循上述逻辑):
这将在所有子级和父级之间共享
这将始终从父级复制,然后在每个子级中生存
检查一下我本来打算在Radim Köhler的帖子上添加一条评论,但由于我没有足够的代表分数,我只想在这里添加一个答案,到目前为止,我使用的唯一解决方案是使用这种方法,避免在控制器范围上添加我不希望由于原型行为而发生冲突的方法/属性 我创建了一个plunker并扩展了我的answser。。希望这将有助于获得更多关于我的景点的细节…@RadimKöhler非常感谢你!我正在研究并阅读您的链接:)