AngularJS UI-router stateprovider问题

时间:2015-02-26 03:47:00

标签: angularjs angular-ui-router ionic-framework

我目前正在使用Ionic,正在玩带有标签的应用。 (我有一个带图标的底栏)。

现在我想删除它,但结束了路由。 devtools没有显示任何错误。我无法从登录页面转到主“帖子”页面。登录时,单击登录按钮可以执行任何操作。我已相应地在控制器中编辑了state.go('')。

在改变之前和之后显示Ill。 删除视图是否有意义:{}完全?我发现它使事情变得复杂,我不使用嵌套视图。不确定模态页面是否需要视图。 欣赏有关如何解决错误的一些帮助/建议。

之前

    .state('tab', {
      url: '/tab',
      abstract: true,
      templateUrl: 'templates/tabs.html'
    })
   // --------Authenticate states ----------------
   .state('auth', {
      url: '/auth',
      templateUrl: 'templates/auth.html',
      controller: 'StartCtrl'
    })
    .state('register', {
      url: '/register',
      templateUrl: 'templates/register.html',
      controller: 'AuthCtrl',
    })
    .state('login', {
      url: '/login',
      templateUrl: 'templates/login.html',
      controller: 'AuthCtrl',
    })

    // ---------- Main states ---------------------

    .state('tab.posts', {
      url: '/posts',
      views: {
        'tab-posts': {
          templateUrl: 'templates/tab-posts.html',
          controller: 'PostsCtrl'
        }
      }
    })
    .state('tab.newpost', {
      url: '/newpost',
      views: {
        'tab-posts': {
          templateUrl: 'templates/tab-newpost.html',
          controller: 'NavCtrl'
        }
      }
    })
    .state('tab.posts.view', {
      url: '/posts/:postId',           
      views: {
        'tab-posts@tab': {
          templateUrl: 'templates/tab-showpost.html',
          controller: 'PostViewCtrl'
        }
      }
    })
    .state('tab.profile', {
      url: '/users/:userId',  
      views: {
        'tab-posts': {
          templateUrl: 'templates/tab-profile.html',
          controller: 'ProfileCtrl',
        }
      }
    })

.state('/', {
  url: '/',
  abstract: true,
  templateUrl: 'templates/tab-posts.html'
})
// --------Authenticate states ----------------
.state('auth', {
  url: '/auth',
  templateUrl: 'templates/auth.html',
  controller: 'StartCtrl'
})

.state('register', {
  url: '/register',
  templateUrl: 'templates/register.html',
  controller: 'AuthCtrl',
  resolve: {
    user: function(Auth){
      return Auth.resolveUser();
    }
  }
})
.state('login', {
  url: '/login',
  templateUrl: 'templates/login.html',
  controller: 'AuthCtrl',
  resolve: {
    user: function(Auth){
      return Auth.resolveUser();
    }
  }
})

//----------- Main states--------------------

.state('posts', {
  url: '/posts',
  views: {
    'posts': {
      templateUrl: 'templates/tab-posts.html',
      controller: 'PostsCtrl'
    }
  }
})
.state('newpost', {
  url: '/newpost',
  views: {
    'posts': {  
      templateUrl: 'templates/tab-newpost.html',
      controller: 'NavCtrl'
    }
  }
})
.state('posts.view', {
  url: '/posts/:postId',
  views: {
    'posts@': {
      templateUrl: 'templates/tab-showpost.html',
      controller: 'PostViewCtrl'
    }
  }
})
.state('profile', {
  url: '/users/:userId',   
  views: {
    'posts': {
      templateUrl: 'templates/tab-profile.html',
      controller: 'ProfileCtrl',
    }
  }
});

针对Levi进行了更新

    app.factory('Auth', function($firebase, $firebaseAuth, FIREBASE_URL, $rootScope) {

      var ref = new Firebase(FIREBASE_URL);
      var auth = $firebaseAuth(ref);            

      var Auth = {
        register: function (user) {
          return auth.$createUser(user.email, user.password);
        },
        login: function (user) {
          return auth.$authWithPassword(user);  
        },
        logout: function() {                     
          auth.$unauth();
        },
        resolveUser: function() {
          return auth.$waitForAuth();          
        },
        signedIn: function() {
          return !!Auth.user.provider;
        },
        createProfile: function (user) {
          var profile = {
            username: user.username,     
            md5_hash: user.md5_hash
          };
          var profileRef = $firebase(ref.child('profile'));
          return profileRef.$set(user.uid, profile);
        },
        user: {}
      };

  auth.$onAuth(function (user){
    if(user) {
      angular.copy(user, Auth.user);
      Auth.user.profile = $firebase(ref.child('profile').child(Auth.user.uid)).$asObject();
      console.log(Auth.user);
    } else {
      console.log('logged out');

      if (Auth.user && Auth.user.profile) {
        Auth.user.profile.$destroy();
      }
      angular.copy({}, Auth.user);
    }
  });

  return Auth;
});


错误跟踪图片 Image for error when resolveUser is deleted from Login in app.js

1 个答案:

答案 0 :(得分:0)

从登录状态中删除解析程序。

.state('login', {
  url: '/login',
  templateUrl: 'templates/login.html',
  controller: 'AuthCtrl',
})

如果有人想要登录,则无法强迫他登录。