1

我正在使用$location.path("/postuser/"+data.permalink)重定向到客户端的其他视图。

在服务器端,我使用 expressJS 来处理路由请求。

这里的问题是$location.path("/postuser/"+data.permalink)将请求发送到服务器以获取数据,但我的数据已经存在于客户端。所以只想渲染其他视图。

在 ExpressJS 中没有与请求匹配的路由器 $location.path("/postuser/"+data.permalink),因为我已经有了数据。

角路由器

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

我认为您遇到的问题,如果我错了,请纠正我,是您在角度和快递上都使用了路线。这不是不可能或错误的,但它可能会导致一些混乱。特别是html5Mode打开。

html5Mode使用一种名为的技术,该技术pushState将使用给定的 url 动态更新位置栏,但不一定会将您带到那里。就是$location这样。它会更新 url,然后触发角度视图进行更改。

如果您在发生这种情况后点击刷新按钮,您可能会得到 404。发生这种情况是因为服务器(快递)不知道 angular 已经在那里创建了自己的视图。

最简单的解决方法是告诉 express 那里有一个页面,并让它在内部将该请求重写到您的主要角度页面。

例如(快递):

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

以匹配您的角度路线中的内容。

于 2013-09-18T16:55:56.343 回答