gpt4 book ai didi

angularjs - UI-Router-范围不会在状态更改时被破坏?

转载 作者:行者123 更新时间:2023-12-04 08:33:29 24 4
gpt4 key购买 nike

我是AngularJS和ui-router的新用户,并且我正在设法改变范围的管理方式。我原以为事件 Controller 的状态在状态更改变为非事件状态时会被破坏,但是事实并非如此。

我已经修改了UI-Router网站上的示例以说明这种情况(请参见下面的“punker”)。每次触发状态route1.list/route2.list时,它们都会在$ rootScope上发出一个事件。接收到该事件后,将在控制台上打印一条调试语句。

通过在两个状态之间切换几次,可以观察到先前初始化的所有 Controller 都对该事件做出了响应。因此看来,它们创建的作用域从未被销毁。这是预期的行为吗?如果是这样,我该怎么做,以使只有事件的 Controller 才能响应事件?

Plunker

在控制台上打印的调试消息:
enter image description here

代码:

var myapp = angular.module('myapp', ["ui.router"])
myapp.config(function($stateProvider, $urlRouterProvider){

// For any unmatched url, send to /route1
$urlRouterProvider.otherwise("/route1")

这是路线1
$stateProvider
.state('route1', {
url: "/route1",
templateUrl: "route1.html"
})
.state('route1.list', {
url: "/list",
templateUrl: "route1.list.html",
controller: function($rootScope, $scope){
$rootScope.$emit("eventCT1");
$rootScope.$on("eventCT2", fn);
function fn () {
console.log("Controller 1 receives an event emitted by Controller 2");
}
$scope.items = ["A", "List", "Of", "Items"];
}
})

这是路线2
  .state('route2', {
url: "/route2",
templateUrl: "route2.html"
})
.state('route2.list', {
url: "/list",
templateUrl: "route2.list.html",
controller: function($rootScope, $scope){
$rootScope.$emit("eventCT2");
$rootScope.$on("eventCT1", fn);
function fn () {
console.log("Controller 2 receives an event emitted by Controller 1");
}
$scope.things = ["A", "Set", "Of", "Things"];
}
})
...

最佳答案

如果我们想做点什么

1) Controller 内部的 $rootScope (生命周期非常有限),

2)当 Controller (实际上是$scope)被销毁时,我们必须销毁它

因此,这就是如何上钩和下钩的方法

// get remove function
var removeMe = $rootScope.$on("eventCT2", ...);

// call that function
$scope.$on("$destroy", removeMe)

但是,在上述情况下,我们甚至不应该尝试

1)为一种状态创建一些 Controller Action ...

2)并期望它将在不同状态的另一个 Controller 中被调用

这些永远不会在一起

关于angularjs - UI-Router-范围不会在状态更改时被破坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33969357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com