Изменение URL-адреса запроса на основе URL-адреса при использовании ui.route
Я использую $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"
});
Поэтому приведенный ниже код работает, если он предназначен для одного URL.
контроллер
app.controller('dashboardCtrl', function ($scope, DashboardFactory){
DashboardFactory.listings(function(DashboardFactory) {
$scope.results = DashboardFactory;
});
});
Внизу фабрика выбирается только из drafts.json
ресурс. Поэтому, когда URL-адрес меняется на неактивный, я хочу, чтобы он извлекался из inactive.json
а также active.json
соответственно.
завод
app.factory('DashboardFactory', function($http){
return {
listings: function(callback){
$http.get('drafts.json').success(callback);
}
};
});
Короче говоря, мне нужно отправлять запросы на любой из трех указанных ниже URL-адресов на основе URL-адреса.
1) '/drafts.json'
2) '/inactive.json'
3) '/active.json'
Я могу создать разные контроллеры для каждого активного, неактивного и черновика и сделать так, чтобы он получался как положено. Но есть ли лучший способ сделать это?
1 ответ
Вы можете использовать службу $state UI route, чтобы определить, в каком состоянии вы находитесь. Просто введите $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'
}
});
Это описано в документации.