我正在$http
调用角度ajax
,ui.router
使用routing
。
路线
.state("/dashboard.inactive", {
url: "/inactive",
templateUrl: "angular/templates/dashboard/inactive.html",
controller: "dashboardCtrl"
})
.state("/dashboard.drafts", {
url: "/drafts",
templateUrl: "angular/templates/dashboard/drafts.html",
controller: "dashboardCtrl"
});
因此,如果是针对单个网址,则以下代码可以使用。
控制器
app.controller('dashboardCtrl', function ($scope, DashboardFactory){
DashboardFactory.listings(function(DashboardFactory) {
$scope.results = DashboardFactory;
});
});
以下工厂仅从drafts.json
资源获取。因此,当网址更改为无效时,我希望它分别从inactive.json
和active.json
获取。
工厂
app.factory('DashboardFactory', function($http){
return {
listings: function(callback){
$http.get('drafts.json').success(callback);
}
};
});
简而言之,我需要根据网址
向以下3个网址中的任何一个发送请求1) '/drafts.json'
2) '/inactive.json'
3) '/active.json'
我可以为每个活动,非活动和草稿创建不同的控制器,并按预期方式进行提取。但有没有更好的方法呢?
答案 0 :(得分:2)
您可以使用ui路线的$state服务来判断您所在的州。
只需将$ state注入您的服务,然后使用$state.current
以访问当前状态配置。
app.factory('DashboardFactory',
function($http, $state){
return {
listings: function(callback){
var currentView = $state.current.url.replace('/', '');
$http.get(currentView + '.json').success(callback);
}
};
});
更好的解决方案是使用params
配置的state
属性或添加一些自定义属性,如:
.state("/dashboard.inactive", {
url: "/inactive",
templateUrl: "angular/templates/dashboard/inactive.html",
controller: "dashboardCtrl",
params: {
json: 'inactive.json'
}
})
.state("/dashboard.drafts", {
url: "/drafts",
templateUrl: "angular/templates/dashboard/drafts.html",
controller: "dashboardCtrl",
params: {
json: 'drafts.json'
}
});
documentation中描述了它。