一旦记录我的控制器初始化脚本没有调用:
转到https://billiving-qa.azurewebsites.net/accountant 电子邮件:qa@billiving.com 传球:111111
当要管理帐户时,下拉列表为空。如果刷新(按f5),则会填充列表。然后,如果您进入隐身或删除缓存并重新加载页面,则列表再次为空。
似乎初始化是在我的单页面应用程序的生命周期的后期调用的。
这是我的代码:
<ion-view hide-back-button="true" ng-controller="DashboardCtrl" ng-init="Initialize()">
<ion-nav-title align-title="center">
<select ng-options="account.Key as account.Name for account in accounts" ng-change="LoadAccount(account)"
ng-model="account.Key">
<option value='' disabled selected>Select Account..</option>
</select>
<a style="cursor: pointer" ng-click="Initialize()">Refresh</a>
</ion-nav-title>
<ion-nav-buttons side="right">
</ion-nav-buttons>
<ion-nav-buttons side="left">
<button class="button button-icon button-clear ion-navicon" menu-toggle="left"></button>
</ion-nav-buttons>
<ion-content class="page page-dashboard is-pad" style="height:100%">
<iframe frameborder="5" class="frm" ng-src="{{trustSrc(url)}}" scrolling="yes"></iframe>
</ion-content>
</ion-view>
这里是angularjs代码:
angular.module('myApp.controllers')
.controller('DashboardCtrl', function ($scope, $http, AppConfig, Utils, AuthService, $state, $sce) {
Utils.hideIndicator();
if (!AuthService.isLoggedIn()) {
$state.go('app.login');
return;
}
$scope.accounts = {};
$scope.account ={};
$scope.url = 'about:blank';
if (localStorage.SelectedKey!=null){
$scope.account.Key = localStorage.SelectedKey;
SetAccount($scope.account);
}
$scope.Initialize = function(){
Utils.showIndicator();
$http.get(AppConfig.endpoint + 'accountants/accounts')
.then(function (response) {
$scope.accounts = response.data;
if ($scope.accounts.length==0)
$state.go('app.register');
Utils.hideIndicator();
});
};
$scope.LoadAccount = function(account){
SetAccount(account);
};
function SetAccount(account) {
$scope.url = AppConfig.BaseAccount + "/Users/Index.aspx?userkey=" + account.Key;
localStorage.SelectedKey = account.Key;
}
$scope.trustSrc = function(src) {
return $sce.trustAsResourceUrl(src);
}
});
答案 0 :(得分:2)
使用Ionic时我遇到了同样的问题,即第二次使用后ng-init无法正常工作。这是因为框架内的缓存机制。它在某种程度上也很有用。但在某些情况下,我们可能不需要此功能。当我们重新加载整个html页面以使ng-init工作时,我们应该在离子视图中使用cache-view="false"
来禁用该单页的缓存。
参考:https://forum.ionicframework.com/t/ionic-beta14-how-to-clean-the-cache-for-a-specific-view/14277
答案 1 :(得分:0)
我发现了2个问题:
ng-init
并直接调用Initialize。编辑:
DashboardCtrl在启动时初始化,因为它是默认页面。您重定向到登录页面,但DashboardCtrl及其页面将由离子框架缓存。登录后,DashboardCtrl不会再次初始化。
也许你可以重新加载
$state.go('app.dashboard', {}, {reload: true});
希望这有帮助
答案 2 :(得分:0)
虽然这不适合SPA,但我最终还是使用了这个:
$state.go('app.dashboard');
$window.location.reload(true);