【发布时间】:2017-02-03 07:28:13
【问题描述】:
我正在使用angular 1.x 和ui-router 0.3.x 开发一个webapp。当我切换到新的视图状态时,相应的控制器将被实例化(数据状态将被重置)。从下面的代码sn-p可以看出,每次切换到/logview时都会创建终端(其实就是jquery.terminal),当视图状态变成别的东西时会被销毁。
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 时,我可以看到自 webapp 启动以来的所有日志消息..
更新 1:我搜索了 SO,这个 question 的答案非常符合要求,它使用 ng-show 显示/隐藏日志视图。这将是一条路要走。但是我需要非常仔细地设计布局,因为我使用kendo-splitter。它将使用绝对容器宽度和高度。隐藏的 div 会搞砸计算。
【问题讨论】:
-
控制器总是被创建和销毁。使用服务保存状态
-
我检查了
ui-router的controllerProvider,它可以动态实例化一个控制器,但它不能缓存任何控制器实例。我要重新设计布局,然后使用ng-show。
标签: jquery angularjs angular-ui-router