繁体   English   中英

如何使用Resolve重定向到页面-AngularJS

[英]How to use Resolve to redirect to a page - AngularJS

我在编写适当的解决函数时遇到问题。

我的目的是在用户首次打开应用程序时将其重定向到视图,以设置一些信息(例如访问代码)。 流程需要如下:

  1. 当用户打开应用程序时,他首先进入“身份验证”状态
  2. 此状态需要解析函数localSetupResolve
  3. 如果被拒绝,则状态更改错误会将用户重定向到状态“设置”

我尝试了以下操作,但是仍然出现以下错误:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM