[英]How to use Resolve to redirect to a page - AngularJS
我在编写适当的解决函数时遇到问题。
我的目的是在用户首次打开应用程序时将其重定向到视图,以设置一些信息(例如访问代码)。 流程需要如下:
我尝试了以下操作,但是仍然出现以下错误:
https://docs.angularjs.org/error/ $ rootScope / infdig?p0 = 10&p1 =%5B%5D
错误:$ rootScope:infdig无限$ digest循环
基本上,我的应用程序会继续解析该功能,然后在摘要循环被剪切时,它将前进至设置。 我想防止这种摘要循环,因为authResolve就是这种情况,其工作正常(如下)。
app.js
//IONIC STANDARD LINES OF CODE
.run(function ($rootScope, $state, $log, $ionicHistory, SetupFactory) {
//
//
$rootScope.$on('$stateChangeError', function(event, toState, toParams, fromState, fromParams, error) {
//
switch (error) {
case "RESOLVE_SETUP_ERROR":
//
console.log("going to setup")
$state.go('setup');
break
default:
//
$state.go('auth');
break
}
console.log("$stateChangeError: error: ", error)
});
})
.config(function($stateProvider, $urlRouterProvider) {
//
//
$urlRouterProvider.otherwise('/auth');
// DOES NOT WORK
var localSetupResolve = function($q, SetupFactory) {
var qLocal = $q.defer();
var FOPEN = SetupFactory.getFOPEN();
console.log("LOCALSETUPRESOLVE", FOPEN)
switch (FOPEN) {
case true:
qLocal.resolve(true);
break
case false:
qLocal.reject("RESOLVE_SETUP_ERROR")
break
}
return qLocal.promise;
}
//
// WORKS FINE
var authResolve = function ($q, Auth) {
var qResolve = $q.defer();
var AuthObj = Auth.getAuthObj();
console.log("authResolve", AuthObj)
switch (AuthObj.authStatus) {
case true:
qResolve.resolve("AUTH_RESOLVE_SUCCESS");
break
case false:
qResolve.reject("AUTH_RESOLVE_UNAUTHORIZED");
break
default:
qResolve.reject("AUTH_RESOLVE_OTHER", AuthObj);
break
};
return qResolve.promise;
};
// Ionic uses AngularUI Router which uses the concept of states
// Learn more here: https://github.com/angular-ui/ui-router
// Set up the various states which the app can be in.
// Each state's controller can be found in controllers.js
$stateProvider
// -----------------
// Authentication & Setup
.state('auth', {
url: '/auth',
templateUrl: 'templates/single-auth.html',
controller: 'AuthCtrl',
resolve: {
localSetupResolve: localSetupResolve
}
})
.state('setup', {
url: '/setup',
templateUrl: 'templates/single-setup.html',
controller: 'SetupCtrl'
})
})
SetupFactory
.factory('SetupFactory', function($localstorage) {
var self = this;
//
// Init
var tableName = "Setup";
var tempTable = {};
var FOPEN = $localstorage.getObject('FIRST_OPEN', '{}');
if(FOPEN != false || FOPEN != true) {
FOPEN = false;
}
self.getFOPEN = function(){
return FOPEN;
}
return self;
})
您有一个无限的摘要循环。
我不确定是否可以将服务注入RUN部分。
我将执行以下操作
.run(function ($rootScope, $state, $log, $ionicHistory,$injector){ var $Auth = $Auth || $injector.get('SetupFactory');
这样,您只需注入一次服务即可。
因此想出了问题。 如上所述这里 ,你需要防止默认事件才去到另一个状态,以避免这种消化周期。
event.preventDefault();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.