我尝试使用这种方法将用户从一个州发送到另一州:
$state.go('splash');
这正常工作,但是,当用户被发送到我的splash
视图时,代码不会重新启动。
这是启动状态的html:
<ion-view hide-nav-bar="true">
<ion-content class="splash-screen" scroll="false">
<div class="loading">
<i class="fa fa-circle-o-notch fa-spin fa-5x fa-fw"></i>
</div>
</ion-content>
</ion-view>
<script id="login.html" type="text/ng-template">
<ion-modal-view>
<ion-header-bar class="bar bar-header bar-stable">
<h1 class="title">Login</h1>
</ion-header-bar>
<ion-content>
<div class="list padding">
<div class="error" ng-if="errors">
<p ng-bind-html="error_message"></p>
</div>
<label class="item item-input">
<input ng-model="data.password" type="password" placeholder="Password">
</label>
<button class="button button-full button-positive" ng-click="login(data)">Login</button>
</div>
</ion-content>
</ion-modal-view>
</script>
这是视图的控制器:
angular.module('app.controllers', [])
.controller('SplashCtrl', function($scope, $http, $state, $ionicModal, $ionicLoading, $ionicPlatform, $timeout, $localstorage, appAPI) {
$scope.data = {};
$scope.data.password = '';
$ionicModal.fromTemplateUrl("login.html", {
scope: $scope,
animation: 'slide-in-up'
}).then(function(modal) {
$scope.modal = modal;
});
$scope.openModal = function() {
$scope.modal.show();
};
$scope.login = function(data) {
alert(data.password);
};
$ionicPlatform.ready(function() {
$scope.openModal();
});
});
当用户第一次访问splash
视图时,模态将按预期的方式加载,但是,当他们从$state.go
定向到那里时-模态不会加载。
有人在想如何使它正常工作吗?
答案 0 :(得分:0)
不幸的是,传递给该函数的其他回调将被静默忽略。 (ARGH!) 1
除了将回调函数作为参数外,它还会返回已准备好平台的承诺。
兑现承诺:
$ionicPlatform.ready().then(function() {
$scope.openModal();
});
答案 1 :(得分:0)
我希望您希望在用户被路由到“ splash”状态时重新加载“ SplashCtrl”控制器。 如果是这样,请尝试使用此$ state.go('splash',{},{reload:true});
答案 2 :(得分:0)
您尚未共享您的整个项目,所以我不能说真的。看来您的结构有些偏离。您应该只有一个ionicPlatform.ready(),并且应该设置环境。完成后,应将用户转发到您的第一个视图,而无需打开模式。
这就是我在应用程序中进行检查的方式。平台就绪函数具有$ state.go('app.calendar');这是我的第一个视图(假设它们已登录)-如果未登录init函数,则从promise中返回错误,并且statechange错误代码将其转发到登录注册页面。
状态控制器
Items
检查是否已登录。
TreeView
回复到状态错误-应用程序优先是登录或注册页面。
.state('app', {
url: '/app',
cache: false,
abstract: true,
templateUrl: 'templates/tabs.html',
controller: 'TabCtrl',
resolve: {
user: function (UserService) {
var value = UserService.init();
return value;
}
}
})
// Calendar
.state('app.calendar', {
url: "/calendar",
cache: true,
views: {
'calendar-tab': {
templateUrl: 'templates/calendar.html',
controller: 'CalendarController'
}
}
})