尝试获取URL并在AngularJS控制器中将该请求重定向到获取json数据的最佳位置。 VideoSearchCtrl绑定到搜索表单。生成的url对于模板是正确的,因此我使用控制器将其重定向到json数据的位置。
GuideControllers.controller('VideoSearchCtrl', ['$scope', 'VideoSearch',
function($scope, VideoSearch) {
var pattern = new RegExp(".*/search\\?=(.*)");
var params = pattern.exec( document.URL )[1];//redirect to videos to execute the search for the data
$scope.videos = VideoSearch.query({ resource: "videos", action: "search", q: params });
}
]);
这会将/ videos / search?q = xyz发送到查询中。工厂创建资源:
var VideoSearchServices = angular.module('VideoSearchServices', ['ngResource']);
VideoSearchServices.factory('VideoSearch', ['$resource',
function($resource){
return $resource("/:resource/:action:params", {resource: "@resource", action: "@action", params: "@params"}, {
query: {
isArray: true,
method: "GET",
headers: {
"Accept": "application/json",
"X-Requested-With": "XMLHttpRequest"
}
}
});
}
]);
但服务器获取的网址为/ videos / search%fq = xyz,而不是/ videos / search?q = xyz,因此调用“show”方法而不是自定义“搜索”操作。显然某处有一些逃脱?或者也许是“?”也是资源工厂寻找的特殊模式?对于那些习惯使用AngularJS或javascript的人来说可能很明显。
我有一个搜索模板,从不同的位置检索json。两者都有效但我不能用上面的代码要求json。
答案 0 :(得分:1)
首先,做:
return $resource("/:resource/:action", {resource: "@resource", action: "@action"}, {
然后:
$scope.videos = VideoSearch.query({ resource: "videos", action: "search", q: params });
要点params
不是您必须向资源声明的网址的一部分,您只需声明resource
和action
然后添加对所有路由都很自然的参数
答案 1 :(得分:0)
实际上有一种更好的方法可以使用来自Angular和jQuery扩展的$ location来实现这一点,这应该适用于任何未来添加的参数。只需要将新的参数添加到查询工厂。
GuideControllers.controller('VideoSearchCtrl', ['$scope', '$location', 'VideoSearch',
function($scope, $location, VideoSearch) {
var route = jQuery.extend(
{ resource: "videos", action: 'search' },
$location.search()
);
$scope.videos = VideoSearch.query(route);
}
]);