1

$location.path("/postuser/"+data.permalink)クライアント側で他のビューにリダイレクトするために使用しています。

サーバー側では、expressJS を使用してルート リクエストを処理しています。

ここでの問題は$location.path("/postuser/"+data.permalink)、データを取得するためにサーバーにリクエストを送信することですが、クライアント側にデータが既に存在しています。したがって、他のビューをレンダリングしたいだけです。

ExpressJS には、 $location.path("/postuser/"+data.permalink)すでにデータがあるため、 request に一致するルーターはありません。

AngularRouter

test.config(['$routeProvider', function($routeProvider) {

    $routeProvider.when('/welcome', {templateUrl: 'partials/welcome.html', controller: 'welcomeController'});

    $routeProvider.when('/postuser/:permalink', {templateUrl: 'partials/userspostpage.html', controller: 'CrudController'});

    $routeProvider.otherwise({redirectTo: '/'});
}]);


test.config(['$locationProvider', function($locationProvider) {
    $locationProvider.html5Mode(true);
}]);

コントローラ

test.controller('CrudController',function($scope,TestServ,$location){

  $scope.create = function(){


    var postData = {
        'subject' : this.title,
        'body' : this.description,
         'tags' : ""
      };


    TestServ.create(postData).success(function(data){
      console.log(data);
      $location.path("/postuser/"+data.permalink)

    }).error(function(errdata){
      console.log("error"+errdata);

    })

  },


});

ExpressJS ルーター

app.get("/test/:permalink", data1);
app.post('/test', data2);
app.get("/not_found", data3);

ビューを変更したり、必要な html をレンダリングする方法を教えてください。

4

1 に答える 1

2

私が間違っている場合は修正してください。あなたが直面している問題は、Angular と Express の両方でルートを使用していることです。それは不可能でも間違っているわけでもありませんが、混乱を招く可能性があります。具体的には、html5Modeオンにします。

html5Modeは、特定の URL でロケーション バーを動的に更新するという技術を使用していpushStateますが、必ずしもそこに移動するとは限りません。それが何をするか$locationです。URL を更新し、 Angular View の変更をトリガーします。

これが発生した後に更新ボタンを押すと、404 が返される可能性があります。これは、angular がそこに独自のビューを作成したことをサーバー (エクスプレス) が認識していないために発生します。

最も簡単な修正は、そこにページがあることを Express に伝え、そのリクエストをメインの angular ページに内部的に書き換えさせることです。

例(エクスプレス):

app.get("/", dataN);
app.get("/welcome", dataN);
app.get("/postuser/:permalink", dataN);

角度ルートの内容に一致します。

于 2013-09-18T16:55:56.343 に答える