使用ui路由器导航到非默认状态

时间:2015-03-11 03:04:20

标签: javascript angularjs google-app-engine angular-ui-router google-app-engine-python

我一直在试图解决这个问题几天,我在互联网上看到的一切都说它应该有效。只要我在应用程序中,我的应用程序路由就可以正常运行,但是当我尝试复制并粘贴网址时,它会丢失其状态并重定向到主页。

*编辑 我开始认为这是因为app.yaml正在处理“不管是什么”的“提供index.html”,它似乎无论app.yaml是什么,它都会消除信息,这就是为什么$ state有一个“”的网址 编辑*

我的服务器配置为返回index.html,无论url是什么,所以它使用我粘贴在浏览器栏中的url到达路由逻辑。当我在运行块中放置断点时,我注入$ state和$ stateParams,它显示当前url是“”,当它到达配置块时我的路由它转到.otherwise('/')并重定向我到应用程序的开头。

app.run([
    '$rootScope', '$state', '$stateParams', function($rootScope, $state, $stateParams){
        $rootScope.$state = $state;
        $rootScope.$stateParams = $stateParams;
        console.log($rootScope);
}])

.config([
'$stateProvider', '$urlRouterProvider', '$locationProvider', function($stateProvider, $urlRouterProvider, $locationProvider){
    $locationProvider.html5Mode(true);
    $urlRouterProvider.otherwise('/');

    $stateProvider
        .state('home', {
            url: '/',
            templateUrl: 'app/layout/home.html',
            controller: function($stateParams){
                debugger;
            }
        })
        .state('other', {
             url: '/{abc:[a|b|c|d]}',
             templateUrl: 'app/layout/other.html'
         });
}]);

这是我的app.yaml

application: app
version: 1
runtime: python27
api_version: 1
threadsafe: no

handlers:
- url: /(.*\.(gif|png|jpg|ico|js|css|html))
  static_files: \1
  upload: (.*\.(gif|png|jpg|ico|js|css|html))

- url: /robots.txt
  static_files: robots.txt
  upload: robots.txt 

- url: .*
   static_files: index.html
   upload: index.html //I am relying on this as a fallback for any 404's, it seems to work

skip_files:
- ^(.*/)?#.*#$
- ^(.*/)?.*~$
- ^(.*/)?.*\.py[co]$
- ^(.*/)?.*/RCS/.*$
- ^(.*/)?\..*$
- node_modules/*
- grunt/*
- Gruntfile.js
- less/*
- lib/*

这是我的main.py,它只是谷歌给你的默认值

import os
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.ext.webapp import template

class MainHandler(webapp.RequestHandler):
  def get (self, q):
    if q is None:
      q = 'index.html'

    path = os.path.join (os.path.dirname (__file__), q)
    self.response.headers ['Content-Type'] = 'text/html'
    self.response.out.write (template.render (path, {}))

def main ():
  application = webapp.WSGIApplication ([('/(.*html)?', MainHandler)],     debug=True)
  util.run_wsgi_app (application)

if __name__ == '__main__':
  main ()

所以当我去localhost:8000时我很好地进入了主页。我单击一个链接转到其他,我最终在localhost:8000 / a或/ b等。如果我将该链接复制并粘贴到另一个选项卡,我最终在localhost:8000。我在运行和配置块中放置断点,并且它到达那里时url没有改变,所以我90%确定它不是服务器问题,但我不知道它可能是什么。我之前确实遇到了问题,我会去/ a并且它会返回错误无法获取/ a。所以我一直修改了服务索引,这就是为什么我相当自信我正确设置了服务器。

据我所知,我的所有研究都应该在角度方面没有任何其他配置。就像我说我可以在我的应用程序中导航一样好,所以看起来我的状态设置正确。

除非我遗漏了某些东西,否则我遇到类似问题的问题似乎并不适用。 1是关于我修复的服务索引问题,另一个是他错过了'/'我不认为我是。

How can I go directly to a state with ui-router without first navigating to index.html

Can't navigate to ui-router state with URL

1 个答案:

答案 0 :(得分:1)

如果有人想知道问题是正则表达格式搞砸了

//this is wrong
url: '/{abc:[a|b|c|d]}'

//this is right
url: '/{abc:a|b|c|d}'

我认为它内部工作正常,因为我将ui-sref绑定到状态,当我尝试复制并粘贴网址时,它依赖于匹配网址。无论哪种方式,它最终工作