我正在开发一个Web应用程序angular
1.x和ui-router
0.3.x.当我切换到新的视图状态时,相应的控制器将被实例化(数据状态将被重置)。正如你可以从下面的代码片断看到的,终端(实际上这是jquery.terminal)将在每次切换到/logview
时创建,并且在视图状态更改为其他内容时将被销毁。UI-Router:如何在切换视图时保留视图
angular.module('app')
.config(['$stateProvider', function($stateProvider) {
$stateProvider.state('logview', {
url: '/logview',
templateUrl: 'views/logview/logview.html',
controller: 'LogViewCtrl'
});
}])
.controller('LogViewCtrl', ['$scope', function($scope) {
var terminal = $('#terminal').terminal();
console.log(terminal created');
$scope.$on('$destroy', function() {
terminal.destroy();
});
}])
;
我想保留logview
,并把它留在后台运行,这样当我切换回logview
再次,我可以看到所有的日志消息,因为web应用程序启动..
更新1:我搜索了SO,这个question有一个非常符合要求的答案,它使用ng-show
来显示/隐藏日志视图。这将是一种方式。不过,我需要非常小心地设计布局,因为我使用kendo-splitter
。它将使用绝对容器的宽度和高度。一个隐藏的div将会把计算搞乱。
控制器总是创建和销毁。使用服务来保存状态 – Phil
我检查了'ui-router'的'controllerProvider',它可以动态实例化一个控制器,但它不能缓存任何控制器实例。我将重新设计布局,然后使用'ng-show'。 – stanleyxu2005