3

私はこれを数日間断続的に理解しようとしてきましたが、インターネットで読んだことはすべて、うまくいくはずだと言っています. アプリのルーティングは、アプリを使用している限り問題なく機能しますが、URL をコピーして貼り付けようとすると、状態が失われ、ホームにリダイレクトされます。

* 編集 app.yaml が「何があっても index.html を処理する」ためだと思い始めています。app.yaml が何をしても情報が取り除かれるように見えます。そのため、$state の URL は「」です。 編集 *

URLに関係なくindex.htmlを返すようにサーバーを構成しているため、ブラウザーバーに貼り付けた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です。これは、Googleが提供するデフォルトです

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 を取得できないというエラーが返されました。そのため、サーブアップインデックスが常に変化することでそれを修正しました。そのため、サーバーを正しくセットアップしたと確信しています。

私のすべての調査からわかる限り、これは角度側でこれ以外の構成なしで機能するはずです。また、アプリ内を問題なくナビゲートできると言ったように、状態が正しく設定されているようです。

同様の問題で見つけたSOの質問だけは、何かが欠けていない限り適用されないようです。1 つは、私が修正したサーブアップ インデックスの問題に関するもので、もう 1 つは、私がそうではないと思う「/」が欠落していたものです。

最初にindex.htmlに移動せずに、ui-routerを使用して状態に直接移動するにはどうすればよいですか

URL で ui-router 状態に移動できません

4

1 に答える 1

1

問題が正規表現形式がめちゃくちゃだったのではないかと誰かが疑問に思っている場合に備えて

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

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

状態にバインドされた ui-sref があり、URL をコピーして貼り付けようとしたときに、URL の一致に依存していたため、内部的には正常に機能していたと思います。いずれにせよ、最終的に機能する

于 2015-03-12T05:03:33.797 に答える