$ location.path如何工作?

时间:2013-09-18 16:32:45

标签: angularjs express

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

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

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

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

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。

1 个答案:

答案 0 :(得分:2)

我认为你遇到的问题,如果我错了,请纠正我,就是你正在使用有角度和快速的路线。这不是不可能或错的,但它可能会导致一些混乱。特别是html5Mode已启用。

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

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

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

例如(明确表示):

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

匹配你的角度路线中的什么。