我正在使用$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。
答案 0 :(得分:2)
我认为你遇到的问题,如果我错了,请纠正我,就是你正在使用有角度和快速的路线。这不是不可能或错的,但它可能会导致一些混乱。特别是html5Mode
已启用。
html5Mode
使用名为pushState
的技术,该技术将使用给定的网址动态更新位置栏,但不一定会带您到那里。这是$location
的作用。它会更新网址,然后触发角度视图进行更改。
如果你在发生这种情况后点击刷新按钮,你可能会得到404.这是因为服务器(快递)不知道角度在那里创建了自己的视图。
最简单的解决方法是告诉快递,那里有一个页面,并在内部将该请求重写到您的主角度页面。
例如(明确表示):
app.get("/", dataN);
app.get("/welcome", dataN);
app.get("/postuser/:permalink", dataN);
匹配你的角度路线中的什么。