我正在使用angular
1.x和ui-router
0.3.x开发一个webapp。当我切换到新的视图状态时,将实例化相应的控制器(数据状态将被重置)。从下面的代码片段中可以看到,每次切换到/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会使计算混乱。
答案 0 :(得分:2)
在ui-route中,状态和控制器的基本原理是一次又一次地加载和销毁。您可以使用Phil的建议(使用服务)。我曾经遇到过类似的问题。我想出了一个技巧。控制器加载时,只需定义$ rootscope对象。然后每次控制器加载时检查对象是否存在/已定义。如果定义,请不要执行您的代码。否则定义$ rootscope对象并执行代码。
angular.module('MyApp',['ngMessages'])
.controller('AppCtrl', function($scope,$rootscope) {
if (!$rootscope.myCtrl){
$rootscope.myCtrl = 'exist';
// Code you don't want to execute in this controller again and again goes here.
var terminal = $('#terminal').terminal();
console.log(terminal created');
$scope.$on('$destroy', function() {
terminal.destroy();
};
// Code you want to execute in this controller goes here.
});
angular.module('MyApp',['ngMessages'])
.controller('AppCtrl', function($scope,$rootscope) {
if (!$rootscope.myCtrl){
$rootscope.myCtrl = 'exist';
// Code you don't want to execute in this controller again and again goes here.
var terminal = $('#terminal').terminal();
console.log(terminal created');
$scope.$on('$destroy', function() {
terminal.destroy();
};
// Code you want to execute in this controller goes here.
});
我认为这将满足您的目的。
答案 1 :(得分:2)
在谷歌上搜索,包括从ui-router的社区检查some discussion后,我终于找到了一个名为ui-router-extras的优秀ui-router插件,它提供了一个神奇的旗帜var data = "
1234567890"
,所以我现在坚持sticky=true
。
答案 2 :(得分:1)
使用state
保持Ui.Router
或SubscriptionManager subscriptionManager = (SubscriptionManager)getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
List<SubscriptionInfo> subscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList();
if (subscriptionInfoList != null && subscriptionInfoList.size() > 0) {
for (SubscriptionInfo info : subscriptionInfoList) {
String carrierName = info.getCarrierName().toString();
String mobileNo = info.getNumber();
String countyIso = info.getCountryIso();
int dataRoaming = info.getDataRoaming();
}
}
的好方法是实施嵌套路线:https://github.com/angular-ui/ui-router/wiki/nested-states-%26-nested-views